2017-04-03 84 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軸旋轉的某個點時,局部正負軸「切換」。任何解決這個問題的方法,如果你只是按住向上或向下鍵,就可以在目標周圍順利旋轉? –