gpt4 book ai didi

C# Unity GetKeyDown() 未被正确检测到

转载 作者:太空宇宙 更新时间:2023-11-03 20:54:30 41 4
gpt4 key购买 nike

所以我已经有了一个小的雪橇原型(prototype)。我目前正在编写一些控件来补充我应用的 RigidBody 物理。我的目标是在左转或右转的相反方向施加一个力,以获得一种打滑、边缘捕捉效果,然后向前施加一个力以补偿动量损失。

但是我做不到那么远,因为无论出于何种原因,我都无法使 GetKeyDown() 或 GetKeyUp() 函数正常工作。我已经包含了下面的代码。基本上发生的是“释放按钮”。文本不断输出,然后偶尔我会得到一个“按钮按下”输出,它只发生一次,然后恢复为“按钮释放”。输出。即使这样也很少见。通常我没有任何检测到的迹象。

我确信我遗漏了一些微不足道的东西,我也寻找过类似的问题,但似乎没有一个能解决我的问题。如果有人能给我任何想法,我将不胜感激。此外,任何优化提示将不胜感激。我对 C# 和 Unity 还是有点陌生​​。

我正在进行调整和试验,所以如果我错过了一些不必要的评论,我深表歉意。

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

private Rigidbody rb;
public bool sidePhysics;
public bool keyPress;

// Use this for initialization
void Awake()
{
rb = GetComponent<Rigidbody>();

}

// Update is called once per frame
void FixedUpdate()
{
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 50.0f;
// No vertical controlls for now.
//var z = Input.GetAxis("Vertical") * Time.deltaTime * 40.0f;


// Get axis against which to apply force
var turnAngle = rb.transform.position.x;




transform.Rotate(0, x, 0);
//transform.Translate(0, 0, z);


// Debug to test input detection
keyPress = Input.GetKeyDown(KeyCode.A);
Debug.Log("keyPress: " + keyPress);

// On either right or left key input down, apply force
// Later once keys are being detected - addForce forward too
if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.LeftArrow)
|| Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.D))
{
Debug.Log("Button pressed. ");

// Add opposing force proportionate to the degree of the turn
rb.AddForce((turnAngle * (-x * 10)), 0, 0, ForceMode.Acceleration);
}
else
{
Debug.Log("Button released.");
}



//Debug.Log("RigidBody: " + rb +
// " Rotation: " + x +
// " turnAngle: " + turnAngle);


}
}

最佳答案

如果您想在 按住 键时连续执行某些操作,请使用 Input.GetKey 函数。如果您想在按下键时一次 做某事,您可以使用Input.GetKeyDown 函数,因为在释放并按下键之前,它只会评估一次为真再次。了解两者之间的区别很重要。

现在,要检测按钮何时被释放,请不要在检查 Input.GetKey 后使用 else 语句。你不会得到你正在寻找的效果。要检测按钮何时被释放,请使用 Input.GetKeyUp 函数。在那里添加另一个 if 语句。

更像是这样的:

if (Input.GetKeyDown(KeyCode.A))
{
//KEY PRESSED
}

if (Input.GetKey(KeyCode.A))
{
//KEY PRESSED AND HELD DOWN
}

if (Input.GetKeyUp(KeyCode.A))
{
//KEY RELEASED
}

最后,您应该始终在 Update 函数而不是 FixedUpdate 函数中检查输入。

关于C# Unity GetKeyDown() 未被正确检测到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51958042/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com