Unity3d 在统一体中围绕对象移动摄影机
以前的帖子似乎没有解决我的问题 我试着让我的相机在一个叫做“目标”的特定点上移动。目标是设置在游戏中心的空游戏对象。这一想法是,相机不会离目标更近或更远,只会围绕目标旋转,就像围绕一个看不见的球体移动一样。摄像机应始终指向目标<代码>变换。注视(目标)可以很好地将相机对准目标,但我无法正确地移动。无论我是沿着水平轴还是垂直轴移动,它都会直接旋转到目标中,而不仅仅是绕着目标移动。有什么想法吗Unity3d 在统一体中围绕对象移动摄影机,unity3d,Unity3d,以前的帖子似乎没有解决我的问题 我试着让我的相机在一个叫做“目标”的特定点上移动。目标是设置在游戏中心的空游戏对象。这一想法是,相机不会离目标更近或更远,只会围绕目标旋转,就像围绕一个看不见的球体移动一样。摄像机应始终指向目标变换。注视(目标)可以很好地将相机对准目标,但我无法正确地移动。无论我是沿着水平轴还是垂直轴移动,它都会直接旋转到目标中,而不仅仅是绕着目标移动。有什么想法吗 public class CameraController : MonoBehaviour { public f
public class CameraController : MonoBehaviour {
public float speed;
public Transform target;
void Update () {
transform.LookAt(target);
if(Input.GetAxis("Vertical") != 0)
{
transform.Translate(transform.up * Input.GetAxis("Vertical") * Time.deltaTime * speed); //.up = positive y
}
if(Input.GetAxis("Horizontal") != 0)
{
transform.Translate(transform.right * Input.GetAxis("Horizontal") * Time.deltaTime * speed); //.right = positive x
}
}
}
要围绕特定点旋转,我使用
Transform.RotateAround
:
transform.RotateAround(target.position, transform.right, -Input.GetAxis("Mouse Y") * speed);
transform.RotateAround(target.position, transform.up, -Input.GetAxis("Mouse X") * speed);
或者,如果您的目标移动,并且您希望在相机和目标之间保持相同的距离,您可以使用myanswers.unity3d.com
page:
public class SphericalCam
: MonoBehaviour
{
public float MinDist, CurrentDist, MaxDist, TranslateSpeed, AngleH, AngleV;
public Transform Target;
public void Update()
{
AngleH += Input.GetAxis("Mouse X");
AngleV -= Input.GetAxis("Mouse Y");
CurrentDist += Input.GetAxis("Mouse ScrollWheel");
}
public void LateUpdate()
{
Vector3 tmp;
tmp.x = (Mathf.Cos(AngleH * (Mathf.PI / 180)) * Mathf.Sin(AngleV * (Mathf.PI / 180)) * CurrentDist + Target.position.x;
tmp.z = (Mathf.Sin(AngleH * (Mathf.PI / 180)) * Mathf.Sin(AngleV * (Mathf.PI / 180)) * CurrentDist + Target.position.z;
tmp.y = Mathf.Sin(AngleV * (Mathf.PI / 180)) * CurrentDist + Target.position.y;
transform.position = Vector3.Slerp(transform.position, tmp, TranslateSpeed * Time.deltaTime);
transform.LookAt(Target);
}
}
摄像机绕目标水平旋转:
transform.RotateAround(target.position, target.forward, Time.deltaTime * speed);
垂直:
transform.RotateAround(target.position, target.right, Time.deltaTime * speed);
这仍然不太管用。首先,当它在X轴上旋转时,它不会一直旋转(它在极点处失速并振荡)。当绕y轴旋转时,无论你在目标上方或下方多远,它都会下降到轨道中,直到其y平移与目标匹配为止。@DylanRussell我在我的项目中使用了这两个功能,它似乎工作得很好。你确定这是由这些引起的吗?弄得一团糟,我实际上注意到极点的问题是,当你到达绕X轴旋转的某个点时,局部正负轴“切换”。只要按住向上键或向下键,就可以实现围绕目标的平滑旋转的任何方法?transform.RotateAround(target.position,transform.right,-Input.GetAxis(“垂直”)*速度);transform.RotateAround(target.position,transform.up,-Input.GetAxis(“水平”)*速度);这就是我正在使用的代码。如果你使用它,只需按住向上或向下键(假设你没有改变输入),你就会注意到当你到达你正在旋转的物体的北极和南极时会发生什么。啊,我修正了它!我没有删除transform.LookAt(目标);现在它工作得很好!非常感谢你!