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);
    }

    }
    }

谢谢。

Unity2D OnCollisionEnter2D

OnCollisionEnter仅在碰撞发生时触发一次。如果你想让它在物体接触时持续触发,你需要使用不同的检查,比如OnCollisionStay。

从评论

当两个物体接触时,index的值永远不会重置。检查您想要的index的值(当使用dialogue的最后一项时),当匹配时,将其重置为0。这样,对话就可以马上重新开始。

相关文章:
  • 没有找到相关文章