2015-10-04 120 views
0

美好的一天,我想以固定速度向前移動我的Rigidbody2D對象,並在用戶點擊屏幕時改變方向。我有代碼:以恆定速度移動物體

public float speed; 

void FixedUpdate() 
{ 
    if(platform == RuntimePlatform.Android || platform == RuntimePlatform.IPhonePlayer){ 
     if(Input.touchCount > 0) { 
      if(Input.GetTouch(0).phase == TouchPhase.Began){ 

      } 
     } 
    } else { 
     if(Input.GetMouseButtonDown(0)) { 
      var touchPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition); 
      Quaternion rot = Quaternion.LookRotation (transform.position - touchPosition, Vector3.forward); 
      transform.rotation = rot; 
      transform.eulerAngles = new Vector3 (0, 0, transform.eulerAngles.z); // only z rotation 
      myScriptRigidBody.velocity = (touchPosition - transform.position).normalized * speed; 
     } 
    } 
} 

據我所知,對象應該改變它的方向鼠標點擊位置和以恆定速度移動。但在實踐中,對象的速度取決於用戶在屏幕上單擊的當前對象位置距離多遠。奇怪的是,我規範我的方向矢量和「速度」變量是不變的。我究竟做錯了什麼?謝謝。

+0

當您說「對象的速度取決於用戶在屏幕上單擊的當前對象位置距離多遠」時,速度究竟取決於位置? – 31eee384

回答

1

的問題是,由ScreenToWorldPoint返回的向量的z分量是相機Z位置。您只需要xy組件。

var touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
touchPosition = new Vector3(touchPosition.x,touchPosition.y,0); 
1

這個想法是,當你點擊某處時,對象會旋轉,你已經做了。但速度不應該取決於你點擊的位置。

所以,速度是一樣的。不要改變它。

myScriptRigidBody.velocity = speed; 

而這應該工作得很好。

+0

我更新了帖子,「speed」var是float且.velocity是一個向量。 A也試圖使用「transform.position.normalized *速度」,但它沒有幫助。我怎樣才能從我的對象檢索前進方向? 「transform.position.forward」也不起作用(奇怪的行爲)。 –

+0

如果您使用'Debug.DrawLine()'或'Debug.DrawRay()',您可以看到forwrad矢量指向的位置,從而使調試更容易。 (http://docs.unity3d.com/ScriptReference/Debug.DrawRay.html) –

1

你可以嘗試Vector3.MoveTowards,並使用你的最後點擊鼠標位置的對象應該移動到:-)

相關問題