Unity2D OnCollisionEnter2D
本文关键字:OnCollisionEnter2D Unity2D | 更新日期: 2023-09-27 18:05:58
你好,我正在创建一个2d游戏,并执行了一个对话脚本-当一个gameObject与另一个gameObject碰撞并按下键盘上的特定键时,将出现一个文本框。
对话框(文本框)使用OnGUI显示,后面有一个数组方法。这是成功的。一旦对话结束,数组重置,然而,我认为一切都已经是真的,即碰撞和键按在键盘上,对话将再次出现。它不是。
我允许对话再次出现的唯一方法是,如果我的gameObject从另一个gameObject的碰撞器移开,然后再次与它碰撞。是否有办法让我不需要离开对撞机,然后重新启动与碰撞的接触来显示我的对话?我不明白如果所有的论点都为真,我为什么要这么做?
如果我没有很好地描述我的问题,我很抱歉,我希望有人能帮助我。这可能是OnCollision2d工作的唯一方式。我不知道。以下是我使用c#编写的代码(我不确定具体的部分是否足够重要,所以我将全部发布):
using UnityEngine;
using System.Collections;
public class showtext : MonoBehaviour
{
bool CollisionWithHouse = false;
bool ActionButtonTextAppearsWithCollision = false;
public string[] dialogue = {"Greetings?",
"Farewell, my friend."};
int index = 0;
Rect dialogueRect = new Rect(435,100,500,50);
Rect dialogueRect2 = new Rect(335,50,300,34);
void Update() {
if (CollisionWithHouse && (ActionButtonTextAppearsWithCollision && Input.GetKeyDown("r")))
{
index++;
}
if (CollisionWithHouse && Input.GetKeyDown("r")){
ActionButtonTextAppearsWithCollision = true;
}
}
void OnCollisionEnter2D(Collision2D house){
{
CollisionWithHouse = true;
}
}
void OnCollisionExit2D(Collision2D house){
CollisionWithHouse = false;
ActionButtonTextAppearsWithCollision = false;
}
void OnGUI() {
if (index < 1 && (CollisionWithHouse) && (ActionButtonTextAppearsWithCollision)) {
GUI.Box(dialogueRect, dialogue[index]);
}
if (index > 0 && (CollisionWithHouse) && (ActionButtonTextAppearsWithCollision)) {
GUI.Box (dialogueRect2, dialogue [index]);
}
else {
System.Array.Clear(dialogue,0, index = 0);
}
}
}
谢谢。
OnCollisionEnter仅在碰撞发生时触发一次。如果你想让它在物体接触时持续触发,你需要使用不同的检查,比如OnCollisionStay。
从评论当两个物体接触时,index
的值永远不会重置。检查您想要的index的值(当使用dialogue
的最后一项时),当匹配时,将其重置为0。这样,对话就可以马上重新开始。