2016-04-25 11 views
0

私はUnityの初心者です。最初の試合では、テンプルランのような無限のランナーを作ることにしました。基本的な地形を設定しましたが、プレーヤーを正しく動かすことに問題があります。私のプレイヤーは3Dキューブであり、ゲームが始まるとすぐに前方に移動します。左矢印キーを押して左折し、ターンの方向に移動し続けます。右矢印キーを押すと、右折してターンの方向に移動し続ける。Unity3dのプレイヤーの移動

現在、私はVector3.leftVector3.righttransform.rotateを使用しています。これは望ましい効果を与えません。たとえば、右矢印キーを押すと、オブジェクトが回転して右回転しますが、右にもう一度右回転すると、オブジェクトだけが回転します(オブジェクトはすでにベクトル方向に移動しています)。

うまくいけば、これは理にかなっています。どんな助けもありがとう。前もって感謝します。 :)

これは私が使用しているコードであり、動作しません。

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(..)などでトランスフォームを回転させます(またはクォータニオンを使用することもできますが、機能を使用する)

関連する問題