我正在学习Unity,但未检测到我的按键
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public Rigidbody myBody;
private float time = 0.0f;
private bool isMoving = false;
private bool isJumpPressed = false;
void Start(){
myBody = GetComponent<Rigidbody>();
}
void Update()
{
isJumpPressed = Input.GetKeyDown(KeyCode.Space);
Debug.Log(isJumpPressed);
}
void FixedUpdate(){
if(isJumpPressed){
myBody.velocity = new Vector3(0,10,0);
isMoving = true;
Debug.Log("jump");
}
if(isMoving){
time = time + Time.fixedDeltaTime;
if(time>10.0f)
{
//Debug.Log( Debug.Log(gameObject.transform.position.y + " : " + time));
time = 0.0f;
}
}
}
}
为什么JumpPressed总是false?我做错了什么?据我所知,这应该可以工作,但我显然遗漏了一些东西
更新:感谢每一个提出想法的人。当我停止尝试检测空格键时,我得到了isjumppressed返回true。
isJumpPressed = Input.GetKeyDown("a");
有人知道为什么这会成功吗
isJumpPressed = Input.GetKeyDown(KeyCode.Space);
或
isJumpPressed = Input.GetKeyDown("space");
更新2:显然这是Linux的一个错误。我听说当游戏只是在编辑器中构建时,它不会发生。我在www.example.com上找到了一个解决方法https://forum.unity.com/threads/space-not-working.946974/?_ga=2.25366461.1247665695.1598713842-86850982.1598713842#post-6188199
如果任何谷歌的绊倒在这个问题上参考以下代码,因为这是为我工作。
public class Player : MonoBehaviour
{
public Rigidbody myBody;
private float time = 0.0f;
private bool isMoving = false;
private bool isJumpPressed = false;
void Start(){
myBody = GetComponent<Rigidbody>();
}
void Update()
{
isJumpPressed = Input.GetKeyDown(SpacebarKey());
if(isJumpPressed)
{
Debug.Log(isJumpPressed);
}
}
void FixedUpdate(){
if(isJumpPressed){
myBody.velocity = new Vector3(0,10,0);
isMoving = true;
Debug.Log("jump");
}
if(isMoving){
time = time + Time.fixedDeltaTime;
if(time>10.0f)
{
//Debug.Log( Debug.Log(gameObject.transform.position.y + " : " + time));
time = 0.0f;
}
}
}
public static KeyCode SpacebarKey() {
if (Application.isEditor) return KeyCode.O;
else return KeyCode.Space;
}
}
3条答案
按热度按时间afdcj2ne1#
问题是
FixedUpdate
和Update
不是一个接一个地被调用,Update是每帧调用一次,FixedUpdate是每物理更新调用一次(默认为每秒50次更新)。因此,可能会发生以下情况:
下面是一个例子,它会在每次按空格键时打印"更新跳转",而只有在按空格键时才打印"固定更新跳转"。
改为执行以下操作:
1qczuiv02#
一个可能的问题是您的项目可能使用了新的Input System包。如果您正在使用这个包,旧的Input Manager函数将无法工作。要检查这个问题,请转到
Edit > Project Settings... > Player > Other Settings
,Active Input Handling
应该设置为Input Manager (Old)
(或者Both
也可能工作)。如果你真的想使用Input System软件包,你必须install它,如果你还没有它,你会检查空格键是否按下,如下所示:
w51jfk4q3#
我也有同样的问题。花了几个小时试图弄清楚。也许从一开始到我弄清楚之前一切都很好。当你我执行播放来查看结果和测试移动时,错误地选择了场景标签。如果我想看到结果(播放),我必须点击“游戏标签”。在游戏标签中检测到了按键。enter image description here