我正在尝试进行统一聊天对话,当与对象碰撞并按下某个按键时应显示该对话框。聊天对话应保持到碰撞退出。问题在于聊天对话在冲突时按键显示,但在同一秒内变为错误,因此闪烁。布尔正在重置,而不是在碰撞时保持为真。统一聊天对话框系统
hitColliders = Physics.OverlapSphere(transform.position, 5f);
int i = 0;
while (i < hitColliders.Length) {
if (hitColliders [i].gameObject.tag == "gameobjectCollision") {
if (Input.GetKey (KeyCode.F)) {
Debug.Log ("pressed F");
DialogueController.showConversation = true;
}
break;
}
else {
Debug.Log ("Conversation Off");
DialogueController.showConversation = false;
}
i++;
}
此外,正在正确连接脚本和网格碰撞器与碰撞游戏对象设置。谢谢。
我实际上尝试过使用触发器,但碰撞是一种越野车,有时对话框打开有时没有任何反应。使用目前的方法,更新检查每帧的冲突 –
是的,这在系统上确实非常昂贵。但是,如果你打算为对话系统进行基于碰撞的检测,你应该真正接入统一的OnCollisionEnter和OnCollisionExit事件。只需在该回调方法内部切换布尔值即可。 但是我在统一资产商店中有一个使用触发器的对话管理系统,没有人对触发系统有任何问题。我建议使用触发器的唯一原因是,当您有很多游戏正在监控的对象时,它们在系统上花费较少。我更新了我的答案以显示我使用的代码 –
如果要使用冲突事件而不是触发器,请将OnTriggerEnter和OnTriggerExit更改为OnCollisionEnter和OnCollisionExit。 –