2016-09-30 19 views
0

現在、私はいくつかのプレーヤーの動きに取り組んでいます。私のプレーヤーの主なアイデアは、斜めではなく、水平と垂直だけに移動します。私はこの問題のための合理的な解決策を見つけることができませんでした。私は本当に剛体やキャラクターを使用したくありません。私が達成したいもう一つのことは、複数の方向キーを押したときに、プレイヤーが最後に押された方向に直接移動したいということです。ここに私のコードです:対角線移動なしに最後に押された方向に移動

using UnityEngine; 
using System.Collections; 


public class controller : MonoBehaviour { 
    public int movementspeed; 
    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() { 


     if (Input.GetKey (KeyCode.A)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,270,0); 
      //move 
      transform.Translate (transform.right * movementspeed * Time.deltaTime); 

     } 
     else if(Input.GetKey (KeyCode.D)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,90,0); 
      //move 
      transform.Translate (transform.right *(-1)* movementspeed * Time.deltaTime); 


     } 
     else if(Input.GetKey (KeyCode.S)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,180,0); 
      //move 
      transform.Translate (transform.forward * (-1) * movementspeed * Time.deltaTime); 
     } 
     else if (Input.GetKey (KeyCode.W)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,0,0); 
      //move 
      transform.Translate (transform.forward * movementspeed * Time.deltaTime); 

     } 
     else if (Input.GetKey (KeyCode.A)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,270,0); 
      //move 
      transform.Translate (transform.right * movementspeed * Time.deltaTime); 

     } 
    } 
} 

答えて

2

あなたの選択ステートメントの構造はあなたにこの機能を与えません。それが最初のものかどうかをチェックするので、そうであれば、それは次のものをチェックします。だから、もし私が何を押しても、私はいつもコードのA部分に達するだけです。

私があなたの場合は、これの上に別のレイヤーを追加することです。キーダウンイベントのみを検出し、一致する変数を設定します。これらを設定したら、他のものを無効にします。次に、これらの変数を移動に使用します。このように:

bool left, right, up, down; 
void CheckInput() { 
    if (Input.GetKeyDown(KeyCode.W) { 
     up = true; 
     left = right = down = false; 
    } 
    if (Input.GetKeyDown(KeyCode.S) { 
     down = true; 
     left = right = up = false; 
    } 
    if (Input.GetKeyDown(KeyCode.A) { 
     left = true; 
     right = up = down = false; 
    } 
    if (Input.GetKeyDown(KeyCode.D) { 
     right= true; 
     left= up = down = false; 
    } 
    //And then do matching OnKeyUp events to set them false 
} 

void Update() { 
    CheckInput(); 
    if (left) 
     //Move left 
    if (right) 
     //Move right 
    //etc. 
} 
+0

あなたの答えをありがとう、いくつかの仕事の後で私はそれが運動スクリプトを作るための良い方法ではないことに気づいた。私は自分の仕事に切り替えました、私は今キャラクターコントローラーを使っています。 – umuur

+0

問題ありません。ある時点であなた自身のキャラクターコントローラーを作ることをお勧めします。それは練習には良いことですが、あなたが望むようにそれを手に入れることができます。 – Martin

関連する問題