【发布时间】:2015-08-01 03:38:37
【问题描述】:
您好,我正在创建一个 2d 游戏并实现了一个对话脚本 - 当一个游戏对象与另一个游戏对象发生碰撞并且按下键盘上的特定键时,会出现一个文本框。
对话框(文本框)使用 OnGUI 出现,后面有一个数组方法。这成功了。一旦对话完成数组重置,但是我会认为一切都是真实的,即碰撞和按下键盘上的键,对话会再次出现..它没有。
让对话再次出现的唯一方法是,如果我的游戏对象远离另一个游戏对象的碰撞器,然后再次与它碰撞。无论如何,我是否不必离开对撞机,然后必须重新启动与碰撞的接触才能显示我的对话?如果所有论点都是真的,我不明白为什么我必须这样做?
抱歉,如果我描述的问题很糟糕,我希望有人能提供帮助。这可能是 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);
}
}
}
谢谢。
【问题讨论】: