Unity2D OnCollisionEnter2D

时间:2015-07-31 15:06:44

标签: c# unity3d collision

您好我正在创建一个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);
    }


    }
    }

感谢。

1 个答案:

答案 0 :(得分:0)

OnCollisionEnter仅在发生碰撞时触发一次。如果您希望在对象触摸时不断触发,则需要使用其他检查,例如OnCollisionStay

FROM COMMENTS

当两个对象触摸时,永远不会重置值index。检查所需索引的值(当使用dialogue的最后一项时)以及何时匹配,将其重置为0.这样,可以立即重新启动对话。