移动到最后按下的方向,没有对角移动

时间:2016-09-30 22:07:00

标签: c# unity3d unityscript unity5

目前我正在研究一些球员动作。我的播放器的主要思想只是水平和垂直移动,而不是对角移动。我找不到任何合理的解决方案来解决这个问题。我现在真的不想使用rigidbody或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); 

        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的选择语句的结构不会为您提供此功能。因为它将检查第一个if,如果为false,它将检查下一个if,依此类推。因此,如果我按住A,无论我按什么,我将始终只到达代码的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.
}