2017-04-03 116 views
0

此处的帖子似乎没有解决我的问题。在Unity中围绕对象移动摄像头

我想让我的相机移动一个特定的点,称为“目标”。 Target是我游戏中心的一个空的gameobject。这个想法是,相机不会离目标更近或更远,并且会围绕目标旋转,就好像它在一个看不见的球体中移动一样。相机应该始终指向目标。 transform.LookAt(target)确实可以让照相机在目标上训练,但我不能正确地获得运动。无论我是沿着水平轴还是垂直轴移动,它总是直接旋转到目标上,而不是在它周围移动。有任何想法吗?

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 
    } 
} 
} 

回答

1

要绕一个特定点我用Transform.RotateAround

transform.RotateAround(target.position, transform.right, -Input.GetAxis("Mouse Y") * speed); 
transform.RotateAround(target.position, transofrm.up, -Input.GetAxis("Mouse X") * speed); 

或者,如果你的目标移动,并要保持相机和你的目标,你可以使用this piece of code从我的答案之间的距离相同.unity3d.com页面:

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); 
    } 
} 
+0

这仍然不起作用。一方面,它在X轴上旋转时不会一直旋转(它在极点处停止振荡)。当绕y轴旋转时,无论目标位于目标上方还是下方,它都会下降到轨道上,直到其Y平移与目标的平移相匹配。 –

+0

@DylanRussell我在我的项目中使用这两个功能,它似乎工作正常。你确定这是由这些造成的吗? –

+0

乱七八糟,我实际上注意到极点的问题在于,当你到达绕X轴旋转的某个点时,局部正负轴“切换”。任何解决这个问题的方法,如果你只是按住向上或向下键,就可以在目标周围顺利旋转? –