【发布时间】:2020-04-16 22:16:36
【问题描述】:
我希望有人能帮我解决这个问题,我确实花了好几天的时间。
我需要将相机聚焦在物体的前面,然后让玩家在按住鼠标按钮的同时绕着物体旋转。我已经设法让相机聚焦在物体的前面,使用这个:
if (!arrived)
{
//Centre on our object
var newPos = target.transform.position + currentRotation * (distance * target.transform.forward);
transform.position = Vector3.Lerp(transform.position, newPos, 0.25f);
transform.LookAt(target.position);
return;
}
但是我正在寻找被按住的鼠标按钮并尝试围绕目标对象旋转,与它保持一致的距离。
我尝试了很多不同的方法,但它们都有问题。
我试过了:
transform.RotateAround(target.position, Vector3.down, (movementForce * 100000) * Time.deltaTime);
但它在水平方向上可以正常工作,但使用 Vector.left 似乎在垂直方向上不起作用。
我试过了:
transform.LookAt(target.position);
Vector3 rotation = new Vector3(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"), 0);
transform.Translate(rotation * Time.deltaTime * 10);
但是随着时间的推移,这会使相机远离目标。
最后我没有尝试这个:
//Horizontal
Vector3 relativePos = target.position - transform.position; // Vector from camera to player
Vector3 relativePosRight = Vector3.Cross(relativePos, Vector3.left);
transform.RotateAround(target.position, relativePosRight, 100 * Time.deltaTime * Input.GetAxisRaw("Mouse X"));
//Vertical
Vector3 relativePos = target.position - transform.position; // Vector from camera to player
Vector3 relativePosRight = Vector3.Cross(relativePos,Vector3.up);
transform.RotateAround(target.position, relativePosRight, 100 * Time.deltaTime * Input.GetAxisRaw("Mouse Y"));
在垂直方向上效果很好,但是当水平移动鼠标时,这似乎也会影响垂直方向并且以奇怪的角度运行。
请原谅上述任何明显的错误,我实际上是通过复制和粘贴我在网上找到的每个解决方案来获得正确的东西。
提前致谢!
【问题讨论】:
标签: c# unity3d camera rotation