播放器上升时,如何下降等于假?

时间:2019-06-09 16:51:24

标签: c# unity3d

我想要它,这样当我按下空格时我会上升,而当我再次按下空格时我会下降等等...

public class PlayerMov : MonoBehaviour
{
    public bool up;
    public bool down;

    public float moveSpeed;

    // Start is called before the first frame update
    void Start()
    {
        down = true;
        moveSpeed = 1;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        if (up == true)
        {
            transform.position += Vector3.up * moveSpeed * Time.deltaTime;
        }

        if (down == true)
        {
            transform.position += Vector3.down * moveSpeed * Time.deltaTime;
        }
    }

    void Update()
    {
        if (Input.GetKey("space") && up == true)
        {
            down = true;
            up = false;
        }

        if (Input.GetKey("space") && down == true)
        {
            down = false;
            up = true;
        }

        if (down == true && up == true)
        {
            down = true;
        }
    }
}

我让它可以在前两次压机上工作,但是之后它一直在上升。谢谢您的帮助:)如果您不知道,我也是Unity的初学者。

2 个答案:

答案 0 :(得分:0)

您实际上根本不需要2个变量。您可以将所有代码简化为:

public class PlayerMov : MonoBehaviour
{
    public bool down = true;
    public float moveSpeed = 1;

    void Update()
    {
        if (Input.GetKey("space"))
        {
            down = !down;
        }
        Vector3 directionVector = (down == true) ? Vector3.down : Vector3.up;
        transform.position += directionVector * moveSpeed * Time.deltaTime;
    }
}

但是,如果您出于某种原因仍想保持原样-您需要这样做:

void Update()
{
    if (Input.GetKey("space"))
    {
        if (up == true)
        {
            down = true;
            up = false;
        }
        else if (down == true)
        {
            down = false;
            up = true;
        }
    }
}

这部分也没有任何意义,它什么也不做:))

    if (down == true && up == true)
    {
        down = true;
    }

答案 1 :(得分:0)

您以down = true开头,并且始终具有down或up true,永远不会都是,所以您只需要一个:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        down = !down;
    }
    Vector3 direction = (down == true) ? Vector3.down : Vector3.up;
    transform.position += direction * moveSpeed * Time.deltaTime;
}

每当您按下Space键时,它将布尔值交换为相反的值。而且,GetKey现在是GetKeyDown,因此它只发生一次,而不是连续很多帧。