Unity OnTriggerEnter2D CompareTag ||比较标签不一致

Posted

技术标签:

【中文标题】Unity OnTriggerEnter2D CompareTag ||比较标签不一致【英文标题】:Unity OnTriggerEnter2D CompareTag || CompareTag inconsistency 【发布时间】:2016-08-27 20:34:19 【问题描述】:

我正在尝试使用 Unity 制作一个通用的“Snake”游戏,以加强我对 C# 和 Unity 基础知识的了解。

我遇到的问题是,在与身体碰撞时,我似乎无法让玩家完成游戏。目前我的碰撞检查设置如下:

void OnTriggerEnter2D(Collider2D other)

    if (other.gameObject.CompareTag("Border") || other.gameObject.CompareTag("Body")) //if the player collides with a Border tag or Body tag...
    
        //Game Over Sequence
        GameOver();
    
    else if (other.gameObject.CompareTag("Collectable")) //otherwise if the player collides with a Collectable tag...
    
        //Snek needs to grow!
        shouldGrow = true;
    

这也是蛇身的预制检查员的照片。我检查以确保标签设置为正文。

边界碰撞工作正常,奇怪的部分是将边界对象设置为“身体”标签也工作正常,所以我不确定为什么身体部分没有触发游戏结束序列。

我是编程新手,如果这个问题很明显,我很抱歉,但我不明白为什么这不起作用。

提前致谢!

编辑:根据程序员的要求,这是边境检查员之一的图像:

【问题讨论】:

|| 表示如果它与 Border Body 碰撞,则 if 语句将为真。在调用GameOver(); 函数之前输入Debug.Log("hit");,如果您在与Border 或Body 发生碰撞时看到该消息,请告诉我。 在与边框碰撞时以及在将其类型设置为“身体”时与边框精灵碰撞时会出现该消息(作为附加检查)。当与蛇的身体部位发生碰撞时,它确实不会出现。看起来“Body”标签和 If 语句工作正常,但由于某种原因,预制件本身并没有触发碰撞。我也在运行时仔细检查了 Snake_Body (Copy) 对象,它仍然有“Body”标签,所以我还是迷路了。 确定您所说的是否属实的唯一方法是暂时删除other.gameObject.CompareTag("Border") ||,此时只需测试Body。如果仍然无法正常工作,请编辑您的问题,统一选择“边框”,对其和设置进行截图并上传到此处,就像您为 Body 所做的那样。 按照您的描述尝试过,在与蛇的身体碰撞时仍然没有调用Debug.Log("hit") 消息或GameOver(); 函数。我已按要求添加了边境检查员的屏幕截图。 Trigger 未在 Snake_Body 中检查。只需检查一下。 【参考方案1】:

在 Snake_Body 的盒子碰撞器上勾选“is Trigger”。没有这个,OnTriggerEnter2D 函数不会被调用。你已经在边界框碰撞器上正确地做到了。

【讨论】:

是的,就是这样。从他上传的两张照片中。 +1 是的,我必须承认,我在看到它之前已经盯着它看了 20 分钟!第二张检查员的照片很明显。 好吧。我觉得有点傻,因为它是如此简单明了哈哈……谢谢你们的帮助!

以上是关于Unity OnTriggerEnter2D CompareTag ||比较标签不一致的主要内容,如果未能解决你的问题,请参考以下文章

unity ontriggerenter2d 有时不工作

unity OnTriggerEnter2D 不能重复使用

Unity OnTriggerEnter2D CompareTag ||比较标签不一致

碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)

Unity OnTriggerEnter2d() 不工作 |尝试在场景之间切换

Unity OnTriggerEnter2D 有时不起作用