2016-04-25 116 views
0

我是Unity的新手,對於我的第一場比賽,我決定讓無盡的跑步者像Temple Run一樣。我已經建立了基本的地形,但我在使播放器正確移動時遇到了問題。我的玩家是一個三維立方體,一旦遊戲開始時它會向前移動,我希望當我按左箭頭鍵左轉並繼續沿轉彎方向移動,並且當我按下右箭頭鍵時右轉並繼續向轉彎方向移動。Unity3d上的玩家動作

目前,我使用Vector3.leftVector3.right以及transform.rotate。這不會產生預期的效果。例如,當我按下右箭頭鍵時,對象將旋轉並右轉,但當我再次右按以再次右轉時,只有對象旋轉(因爲對象已經在Vector.right方向上移動)。

希望這是有道理的。任何幫助,將不勝感激。提前致謝。 :)

這是我使用的代碼,它不工作。

using UnityEngine; 
using System.Collections; 

public class NewBehaviourScript : MonoBehaviour 
{ 

    public float speed; 

    private Vector3 dir; 


    // Use this for initialization 
    void Start() 
    { 
     dir = Vector3.zero; 

    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.UpArrow)) 
     { 
      dir = Vector3.forward; 
     } 
     if (Input.GetKeyDown(KeyCode.RightArrow)) 
     { 
      dir = Vector3.right; 
      transform.Rotate(0, 90, 0); 
      Quaternion.AngleAxis(90, Vector3.up); 
     } 
     if (Input.GetKeyDown(KeyCode.LeftArrow)) 
     { 
      dir = Vector3.left; 
      transform.Rotate(0, -90, 0); 
      Quaternion.AngleAxis(-90, Vector3.up); 
     } 

     float amountToMove = speed * Time.deltaTime; 

     transform.Translate(dir * amountToMove); 
    } 
} 

回答

1

Vector3.right只是短暫的矢量指向(0,0,1),它有什麼與你的遊戲對象的方位。還有transform.forward/right/up,其中考慮了對象的旋轉。 基本上,如果您總是想要將對象向前移動,請使用transform.forward以簡化操作,並使用transform.Rotate(..)transform.RotateAround(..)或類似的東西旋轉它的變換(或者可以使用四元數,但如果它沒有立即告訴您任何事情,請遠離它們,使用功能)