按下键时C#和Unity3D

imp*_*335 10 c# unity-game-engine

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

我想知道原因:

Input.GetKeyDown(KeyCode.UpArrow))
Run Code Online (Sandbox Code Playgroud)

放入内部时仅触发一次:

void Update()
Run Code Online (Sandbox Code Playgroud)

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

我已经设法通过使用两个在按下和释放按键时改​​变的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) ;
}

}
Run Code Online (Sandbox Code Playgroud)

red*_*una 7

文件说,这是正常的,预期的行为.

你可能想要使用GetButtonGetAxis,因为只要按下键就会显示"按下"(GetButton返回true,GetAxis返回1).


小智 5

来自Input.GetKeyDown的文档.

您需要从Update函数调用此函数,因为每个帧都会重置状态.在用户释放该键并再次按下该键之前,它不会返回true.

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

您可以使用上面提到的方法,但是您可以使用Input.GetKey来实现您的目标.

当用户按下由name标识的键时返回true.