Unity2D“Input.GetKeyDown 不再工作
Unity2D "Input.GetKeyDown isn't working anymore
我是 Unity 编程和游戏开发的初学者,请耐心等待。
我试图在按下按钮时为播放器添加一个力。这背后的主要概念是,如果玩家面向左侧或右侧,那么玩家应该朝那个方向发射。
我一直在尝试使用“InputGetKeyDown(KeyCode.A/D 根据我最后按下的按钮(“A”或“D”)让代码检测玩家是面向左还是向右) 命令。
我制作了两个私有布尔值(IsFacingRight 和 IsFacingLeft)。默认情况下,IsFacingRight 开始为 true,Left 开始为 false,但如果玩家切换方向,则布尔值将相应更改。当我按下左移键时启动会发生,但也没有注册。
我尝试使用“Debug.Log”来查看代码是否检测到输入,正如我所料,它没有。当我按下“A”或“D”或“LeftShift”时,调试控制台中不会出现任何内容。所以现在我确认 unity 没有检测到输入。
该代码要大得多,但它的所有功能都适用于我将在下面列出的部分。我还应该提到,除了上面提到的所有内容之外,代码没有任何错误并且模拟运行完美。这是代码:
private bool IsFacingR = true;
private bool IsFacingL = false;
public Rigidbody2D RB;
private float thrust = 20f;
void Sliding()
{
if (Input.GetKeyDown(KeyCode.D))
{
Debug.Log("Im R");
IsFacingR = true;
IsFacingL = false;
}
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log("Im L");
IsFacingR = false;
IsFacingL = true;
}
if (Input.GetButtonDown("Crouch")) ;
{
Slide();
}
}
void Slide()
{
if (IsFacingR = true) ;
{
RB.AddForce(Vector2.right * thrust);
}
if (IsFacingL = true) ;
{
RB.AddForce(-Vector2.right * thrust);
}
}
您没有调用 Sliding()
方法。
将此方法重命名为 Update()
,确保您的 class 继承了 MonoBehaviour 并且此 class 作为组件在场景中的活动 GameObject 上。
你应该把这个添加到你的单一行为中;
void Update(){
Sliding();
}
你也可以这样处理 isFacingL;
private bool IsFacingL => !IsFacingR;
根据您提供的代码,IsFacingR
和 IsFacingL
从未更新的原因是因为从未调用函数 Slide()
和 Sliding()
。
如果您的 class 扩展自 MonoBehaviour
,您可以使用 Update()
函数,它会在每一帧调用。
void Update() {
this.Sliding();
}
我是 Unity 编程和游戏开发的初学者,请耐心等待。
我试图在按下按钮时为播放器添加一个力。这背后的主要概念是,如果玩家面向左侧或右侧,那么玩家应该朝那个方向发射。
我一直在尝试使用“InputGetKeyDown(KeyCode.A/D 根据我最后按下的按钮(“A”或“D”)让代码检测玩家是面向左还是向右) 命令。
我制作了两个私有布尔值(IsFacingRight 和 IsFacingLeft)。默认情况下,IsFacingRight 开始为 true,Left 开始为 false,但如果玩家切换方向,则布尔值将相应更改。当我按下左移键时启动会发生,但也没有注册。
我尝试使用“Debug.Log”来查看代码是否检测到输入,正如我所料,它没有。当我按下“A”或“D”或“LeftShift”时,调试控制台中不会出现任何内容。所以现在我确认 unity 没有检测到输入。
该代码要大得多,但它的所有功能都适用于我将在下面列出的部分。我还应该提到,除了上面提到的所有内容之外,代码没有任何错误并且模拟运行完美。这是代码:
private bool IsFacingR = true;
private bool IsFacingL = false;
public Rigidbody2D RB;
private float thrust = 20f;
void Sliding()
{
if (Input.GetKeyDown(KeyCode.D))
{
Debug.Log("Im R");
IsFacingR = true;
IsFacingL = false;
}
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log("Im L");
IsFacingR = false;
IsFacingL = true;
}
if (Input.GetButtonDown("Crouch")) ;
{
Slide();
}
}
void Slide()
{
if (IsFacingR = true) ;
{
RB.AddForce(Vector2.right * thrust);
}
if (IsFacingL = true) ;
{
RB.AddForce(-Vector2.right * thrust);
}
}
您没有调用 Sliding()
方法。
将此方法重命名为 Update()
,确保您的 class 继承了 MonoBehaviour 并且此 class 作为组件在场景中的活动 GameObject 上。
你应该把这个添加到你的单一行为中;
void Update(){
Sliding();
}
你也可以这样处理 isFacingL;
private bool IsFacingL => !IsFacingR;
根据您提供的代码,IsFacingR
和 IsFacingL
从未更新的原因是因为从未调用函数 Slide()
和 Sliding()
。
如果您的 class 扩展自 MonoBehaviour
,您可以使用 Update()
函数,它会在每一帧调用。
void Update() {
this.Sliding();
}