繁体   English   中英

按下键时C#和Unity3D

[英]C# and Unity3D while key is being pressed

我是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) ;
}

}

文档说这是正常的预期行为。

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

来自Input.GetKeyDown的文档。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM