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 CompareTag ||比较标签不一致
碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)