您好我正在创建一个2D游戏并实现了一个对话脚本 - 当一个游戏对象与另一个游戏对象按下并按下键盘上的特定按键时,会出现一个文本框。
对话框(文本框)使用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);
}
}
}
感谢。
答案 0 :(得分:0)
OnCollisionEnter仅在发生碰撞时触发一次。如果您希望在对象触摸时不断触发,则需要使用其他检查,例如OnCollisionStay。
FROM COMMENTS
当两个对象触摸时,永远不会重置值index
。检查所需索引的值(当使用dialogue
的最后一项时)以及何时匹配,将其重置为0.这样,可以立即重新启动对话。