如何记录在Unity中碰撞的游戏对象

时间:2018-11-13 21:03:39

标签: c# unity3d

这是我的第一个统一项目,因此我对平台的所有功能都不熟悉。当我将玩家游戏对象运行到终点时,我试图将消息记录到控制台。这两个对象上都有Box Colliders,并且我已将C#脚本附加到播放器对象。以下是我目前拥有的代码。

 void OnCollisionEnter2D(Collision2D col)
{
     if (col.gameObject.tag == "Finish")
    {
        Debug.Log("Finish");


    }
}

问题是,当我将播放器移到“完成”对象中时,控制台内没有日志记录。 预先感谢!

This is the main player inspector tab

This is the finish line inspector tab

3 个答案:

答案 0 :(得分:3)

您附在播放器上的脚本检查是否与带有标签“完成”的对象发生碰撞。您的对象“终点线”具有标签“未标记”。您必须在标签上添加“完成”标签才能看到其正常工作。

答案 1 :(得分:2)

使用更新的问题和屏幕截图,问题是您正在检查“完成” 标签,但“完成” GameObject的标签设置为“未标记” ”,因此if (col.gameObject.tag == "Finish")语句将评估为true。

您有两个选项:

1 。选择“完成”游戏对象,单击标有“未标记”的标签,然后创建一个名为“完成”的新标签。如果已经有了此标记,请将“完成”游戏对象的标记从“未标记”更改为“完成”,您的if (col.gameObject.tag == "Finish")代码应该可以使用。


2 。如果您不打算使用标签,则只需按名称而不是标签比较GameObject,只需将if (col.gameObject.tag == "Finish")替换为if (col.gameObject.name == "Finish")

如果以上两个选项都不适合您,那么OnCollisionEnter2D根本不会被调用。将Debug.Log放在if语句之外,如下所示,并对是否有日志发表评论。

void OnCollisionEnter2D(Collision2D col)
{
    Debug.Log("Finish: " + col.gameObject.name);
}

答案 2 :(得分:0)

首先想到的是: -是否在两个应该碰撞的对象上添加了碰撞器? 没有它们,引擎将根本不会产生碰撞事件。