如何让 Input.GetKey 在 Update 函数中被按下一次?

How do i make Input.GetKey to be pressed once inside Update function?

如果我像现在一样使用 GetKeyDown 而不是 KeyDown,则按下 "o" 键什么都不做。 但是如果我使用 GetKey 然后 KeyCode.O 当我按下 O 键时角色停止行走但是我需要一直按下 O 键如果我释放键角色将继续行走。

我想要做的是,当我点击一次 O 键时,角色将停止行走,即使在释放键时也是如此,然后如果我点击 "p" 键,它将恢复行走。

我使用速度 属性 进行 pause/continue 行走的原因是如果我将:

gameObject.GetComponent<Animator> ().Stop(); 

角色停止行走,但 scene/world 的其余部分正在向角色移动。当我尝试使用时:

gameObject.GetComponent<Animator> ().Play();

然后我需要像 Play("Walk") 一样在 Play 中添加一些参数,但它没有用。

这就是为什么我决定将速度 属性 用于 pause/continue。

using UnityEngine;
using System.Collections;

public class Ai : MonoBehaviour {

    Animator _anim;
    // Use this for initialization
    void Start () {

        _anim = GetComponent<Animator> ();
    }


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

        if (Input.GetKey (KeyCode.Z)) {
            _anim.speed = 20.0f;
        }

        if (Input.GetKeyDown ("o"))
            gameObject.GetComponent<Animator> ().speed = 0;
        if(Input.GetKeyDown("p"))
            gameObject.GetComponent<Animator>().speed = 2;
    }
}

Input.GetKeyX 只能获取在 Edit > Project Settings > Input 下指定的键。 如果它与现有密钥之一不匹配,则需要在此处指定密钥。

如果不需要,只需更改其中一个现有的,或者更改 size 以创建额外的。轴的名称是您输入 Input.GetKeyX 的名称,例如 Input.GetKeyDown("Fire1").

编辑:
文档中的一些更深入的信息:https://docs.unity3d.com/Manual/ConventionalGameInput.html