【发布时间】: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 中检查。只需检查一下。