【发布时间】:2021-10-28 14:26:14
【问题描述】:
所以,过去几周我一直在努力学习 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);
}
}
}
正如你所看到的,我有日志语句,每次玩家和目标触摸时打印一些东西,每次按下空格键,每次在他们接触时按下空格键。这就是一切正常时控制台的样子:Image One。这是我的代码不工作时控制台的样子:Image Two。
因此,即使它不起作用,碰撞和按键仍会同时记录。但是由于某种原因,命中本身没有被注册(所以 if 条件没有通过)。因此,我非常有信心这不仅仅是输入延迟或我在错误的时间按下了键。正如我上面提到的,这只发生在大约 20% 的时间里,这让我更加困惑。 Target 有一个触发器 collider2D,它还有一个动态 RigidBody2D,其重力比例设置为 0(正如我被告知的那样)。任何帮助将不胜感激。
(我的对撞机和刚体的外观:Image)
【问题讨论】:
-
请使用正确的标签!请注意,
unityscript是或更好地曾经是一种 JavaScript 风格,类似于早期 Unity 版本中使用的自定义语言,并且现在早已弃用了!您的代码显然是c#!你应该做的是标记unity3d,因为这是你在这里使用的主要框架/API -
您可能应该查看docs.unity3d.com/Manual/ExecutionOrder.html 并注意触发器作为物理事件发生,输入作为更新(使用脚本顺序)作为游戏逻辑处理。