2016-09-30 52 views
0

目前我正在處理一些球員動作。我的玩家的主要想法只是水平和垂直移動,而不是對角線。我找不到任何合理的解決方案來解決這個問題。我現在真的不想使用剛體或character.controller。我想要實現的另一件事是,當我按下多個方向鍵時,我希望我的播放器直接移動到最後按下的方向。這裏是我的代碼:移動到沒有對角線移動的最後按下的方向

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

你的選擇語句的結構不會給你這個功能。因爲它會檢查第一個if,那麼如果是false,它將檢查next else if,等等。所以如果我堅持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

謝謝你的回答,在做了一些工作後,我意識到這不是一個好的方法來製作腳本。我切換了我的工作,現在我正在使用charactercontroller。 – umuur

+0

沒問題。我可以推薦在某個時候製作自己的角色控制器。這對練習很有幫助,而且你可以通過這種方式得到它。 – Martin