按下键时C#和Unity3D

时间:2012-07-06 19:40:58

标签: c# unity3d

我是C#的新手。我正在Unity中创建一些东西来帮助我更好地学习C#和Unity。

我想知道原因:

Input.GetKeyDown(KeyCode.UpArrow))

放入内部时仅触发一次:

void Update()

由于更新是一个循环,为什么在按住键的同时不会触发(在我的情况下导致球体移动)?

我已经设法通过使用两个在按下和释放按键时改​​变的bool来使其工作。

这是我正在玩的完整脚本,用于移动球体并模拟加速/减速:

using UnityEngine;
using System.Collections;

public class sphereDriver : MonoBehaviour {
int x ;
bool upPressed = false ;
bool downPressed = false ;
void Start()
{
    x = 0 ;
}

void Update ()
{
    if(x > 0) {
        x -= 1 ;
    }
    if(x < 0) {
        x += 1 ;
    }
    if(Input.GetKeyDown(KeyCode.UpArrow))
    {
        upPressed = true ;
    }
    else if(Input.GetKeyUp(KeyCode.UpArrow))
    {
        upPressed = false ;
    }

    if(upPressed == true)
    {
        x += 5  ;
    }

    if(Input.GetKeyDown(KeyCode.DownArrow))
    {
        downPressed = true ;
    }
    else if(Input.GetKeyUp(KeyCode.DownArrow))
    {
        downPressed = false ;
    }

    if(downPressed == true)
    {
        x -= 5  ;
    }

    transform.Translate(x * Time.deltaTime/10, 0, 0) ;
}

}

2 个答案:

答案 0 :(得分:7)

documentation表示这是正常的预期行为。

你可能想要使用GetButtonGetAxis,因为只要按下键,这些就表示“按下”(GetButton返回true,GetAxis返回1)。

答案 1 :(得分:5)

来自Input.GetKeyDown的文档。

  

你需要从Update函数调用这个函数,因为   每个帧重置状态。直到用户才会返回true   已经释放了钥匙并再次按下它。

此方法对于打开​​菜单或其他一次性事件非常有用。比如继续对话。

您可以使用上述方法,但您可以使用Input.GetKey来实现目标。

  

当用户按下由名称标识的密钥时返回true。