代码与预期表现不符:请问一下在代码中使用了Mathf.Clamp()把旋转角限制在-90度到90度之间,但是游戏中旋转的X值只能降到0,一旦小于0就被重置回90,这个问题应该怎么解决啊?
以下是我的代码:
public class 移动 : MonoBehaviour
{
public GameObject playerCamera = GameObject.Find("Camera");
public float mouseSpeed = 100f;
float mouseMoveX;
float mouseMoveY;
// Start is called before the first frame update
void Start()
{
Cursor.lockState = CursorLockMode.None;
}
// Update is called once per frame
void Update()
{
//实时获取Transform的数据
mouseMoveX = Input.GetAxis("Mouse X");//垂直
mouseMoveY = Input.GetAxis("Mouse Y");//水平
Look();
}
public void Look()//鼠标控制视角转动的函数
{
Vector3 angles = playerCamera.transform.eulerAngles;
angles.x -= mouseMoveY * mouseSpeed * Time.deltaTime;
angles.y += mouseMoveX * mouseSpeed * Time.deltaTime;
angle.x = Mathf.Clamp(angle.x, -90f, 90f);
playerCamera.transform.eulerAngles = angles;
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:可以在相机旋转的代码中先将旋转角度限制在正负90度之间,然后再使用Mathf.Clamp01()函数限制在0~1之间。具体代码如下:
public float sensitivity = 3.0f;
public float maxYAngle = 90f;
public float minYAngle = -90f;
private float rotationY = 0.0f;
// 处理相机旋转
void LookRotation()
{
float yRot = Input.GetAxis("Mouse X") * sensitivity;
float xRot = Input.GetAxis("Mouse Y") * sensitivity;
rotationY += xRot;
rotationY = Mathf.Clamp(rotationY, minYAngle, maxYAngle); // 限制旋转角度在正负90度之间
transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y + yRot, 0);
transform.localRotation *= Quaternion.Euler(-rotationY, 0, 0);
transform.localRotation *= Quaternion.Euler(0, transform.localEulerAngles.y + yRot, 0);
transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0);
transform.localPosition *= Quaternion.Euler(-rotationY, 0, 0);
transform.localPosition *= Quaternion.Euler(0, yRot, 0);
transform.localPosition = new Vector3(transform.localPosition.x, Mathf.Clamp01(transform.localPosition.y), transform.localPosition.z); // 限制Y轴移动范围在0~1之间
}
public float sensitivity = 3.0f;
public float maxYAngle = 90f;
public float minYAngle = -90f;
private float rotationY = 0.0f;
// 处理相机旋转
void LookRotation()
{
float yRot = Input.GetAxis("Mouse X") * sensitivity;
float xRot = Input.GetAxis("Mouse Y") * sensitivity;
rotationY += xRot;
rotationY = Mathf.Clamp(rotationY, minYAngle, maxYAngle); // 限制旋转角度在正负90度之间
transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y + yRot, 0);
transform.localRotation *= Quaternion.Euler(-rotationY, 0, 0);
transform.localRotation *= Quaternion.Euler(0, transform.localEulerAngles.y + yRot, 0);
transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0);
transform.localPosition *= Quaternion.Euler(-rotationY, 0, 0);
transform.localPosition *= Quaternion.Euler(0, yRot, 0);
transform.localPosition = new Vector3(transform.localPosition.x, Mathf.Clamp01(transform.localPosition.y), transform.localPosition.z); // 限制Y轴移动范围在0~1之间
}