所以,在过去的几周里,我一直在努力学习Unity。作为一个启动项目,我决定尝试复制手机游戏《Pop the Lock》。现在,我的键盘输入有一些问题,我就是不知道如何解决。
这是我的游戏画面:GameScreen。红条代表玩家,黄圈代表目标。随着游戏的进行,玩家将绕着圆环向目标方向旋转。
基本上,如果玩家和目标接触并且玩家同时按下空格键,那么玩家应该获得一分。目标也应该被摧毁,新的目标应该随机出现在游戏屏幕的某个地方。目前,这个系统是有效的……大多数时候。在80%的情况下,我的代码能够正常运行,但在20%的情况下,当玩家按下空格键时,我的代码无法正常运行。下面是我的代码:
public class Target: MonoBehaviour {
public GameObject target;
void Update () {
if (Input.GetKeyDown("space")) {
Debug.Log("SPACE PRESSED!!");
}
}
private void OnTriggerEnter2D (Collider2D collision) {
Debug.Log("Collision!");
}
private void OnTriggerStay2D(Collider2D other) {
// This is the part that sometimes isn't registering:
if (Input.GetKeyDown("space")) {
Debug.Log("HIT!!");
Score.score++;
// Code to spawn new Target on random place in the ring:
// Seems to be working as intended:
float distance = 2.034822f;
float x = Random.Range(-2f, 2f);
float y = Mathf.Pow(distance,2) - Mathf.Pow(x,2);
y = Mathf.Sqrt(y);
float[] options = {y, -y};
int randomIndex = Random.Range(0, 2);
y = options[randomIndex];
Vector3 vector = new Vector3(x, y, 0);
GameObject newTarget = Instantiate(target, vector, Quaternion.identity);
Destroy(gameObject);
}
}
}
正如你所看到的,我有Log语句,每次玩家和目标接触时,每次空格键被按下时,每次他们接触时空格键被按下时,都会打印一些东西。这是控制台在一切正常工作时的样子:这是我的代码不工作时控制台的样子:
所以即使它不工作,碰撞和按键仍然在同一时间被记录。但是由于某些原因,命中本身没有被注册(因此if条件没有传递)。正因为如此,我非常确信这不仅仅是输入延迟或我在错误的时间按了键。正如我上面提到的,这种情况只发生在20%左右,这让我更加困惑。目标有一个触发collider2D,它也有一个动态的RigidBody2D,重力比例设置为0(正如我被告知的那样)。如有任何帮助,我将不胜感激。
(如何我的碰撞器和刚体外观:图像)
当你在更新循环中按下键时,你可以设置一个标志为true,这样更新循环就会转换为如下格式:
private bool isSpacePressed = false;
update() {
isSpacePressed = false;
if (Input.GetKeyDown(KeyCode.Space)){
isSpacePressed = true;
}
}
所以每次循环标志都会被设为false除非你按下空格键和OnTriggerStay2D同时变成类似
的东西OnTriggerStay2D () {
if(isSpacePressed){
.. do magic..
}
}
看,我将Input.GetKeyDown('space')替换为Input.GetKeyDown(KeyCode.Space),我建议使用这个来避免输入错误