我正在尝试使相机在Unity中移动,但是我有一个问题,即使在播放之前我将其旋转为Y,播放器也始终会以0,0,0旋转开始。
我将代码沿Y轴旋转播放器,将摄像机沿X轴旋转,因此播放器在上下看时不会旋转。
代码如下:
public float cameraSpeed;
//public float smooth = 2;
[Range(0f, 1f)] public float smooth = 0.5f;
Vector2 mouseLook;
Vector2 smoothV;
private Transform cameraTransform;
void Start()
{
//Inicializamos componentes
rb = GetComponent<Rigidbody>();
cameraTransform = Camera.main.transform;
mouseLook.y = Mathf.Clamp(-cameraTransform.localRotation.x, -75, 50);
mouseLook.x = transform.localRotation.y;
}
void CameraMovement()
{
//Declaramos un vector con la direccion del raton
Vector2 md = new Vector2(InputManager.main.HorizontalMouse(), InputManager.main.VerticalMouse());
md *= cameraSpeed / smooth;
smoothV = Vector2.Lerp(smoothV, md, smooth);
mouseLook += smoothV;
//Limitamos el angulo de la camara para que no de vueltas
mouseLook = new Vector2(mouseLook.x, Mathf.Clamp(mouseLook.y, -75, 50));
//Hacemos que rote la camara en el eje x y el jugador en el eje y
Camera.main.transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
transform.localRotation = Quaternion.AngleAxis(mouseLook.x , transform.up);
}
答案 0 :(得分:0)
因为您没有连续保持旋转值。您开始总是使用鼠标旋转,这就是为什么要保持旋转值
Camera.main.transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right) * Camera.main.transform.localRotation;
transform.localRotation = Quaternion.AngleAxis(mouseLook.x , transform.up) * transform.localRotation;
答案 1 :(得分:0)
mouseLook
在第一帧中始终为0, 0
。所以当你这样做
mouseLook += smoothV;
第一次使用从zero
向量开始的值。
您应该存储初始旋转(例如,同时保存mainCamera以避免始终通过Camera.main
来获取旋转),例如
private Transform cameraTransform;
private void Start()
{
cameraTransform = Camera.main.transform;
mouseLook.y = MathfClamp(-cameraTransform.localRotation.x, -75, 50);
mouseLook.x = transform.localRotation.y;
}
然后在您的smooth
计算中,因为两个分量x
和y
相等
md = Vector2.Scale(md, new Vector2(cameraSpeed * smooth, cameraSpeed * smooth));
您还可以使用简单的float
乘法
md *= cameraSpeed * smooth;
然后可以使用{p>代替Lerp
和x
组件,而不必单独使用
y
我实际上建议您更好地理解而不是使用
smoothV = Vector2.Lerp(smoothV, md, 1f / smooth);
然后相应地
[Range(0f, 1f)] public float smoothFactor = 0.5f;