我正在尝试以统一方式进行聊天对话,当与对象发生碰撞并按下按键时,该对话应显示出来。聊天对话应保持到冲突退出。问题是聊天对话在碰撞时显示在按键上,但在同一秒内变为假,因此它会闪烁。在碰撞中,bool被重置而不是保持为真。
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++;
}
此外,正确附加脚本并且使用碰撞游戏对象设置网格对撞机。感谢。
答案 0 :(得分:0)
你应该考虑从触发器而不是碰撞中做到这一点。因此,为每个NPC制作一个单独的触发框,您可以在游戏中与之交谈。然后在播放器脚本中使用OnTriggerEnter和OnTriggerExit。 OnTriggerEnter您可以通过单击按钮启动对话,然后OnTriggerExit可以关闭覆盖。
public void Update()
{
if (inInteractRange && Input.GetKeyDown(KeyCode.E))
{
DialogueSystemManager.Instance.StartDialogueForNpc(interactableNPCName);
}
}
private void OnTriggerEnter(Collider col)
{
inInteractRange = true;
}
private void OnTriggerExit(Collider col)
{
inInteractRange = false;
DialogueSystemManager.Instance.CloseDialogueWindow();
}
答案 1 :(得分:0)
您可以执行以下操作