我有几个使用统一检查器设置的tilebase变量:

public TileBase obstacle; //obstacle tile
public TileBase spikes; //instant death tile


我在设置为tilemap资产的脚本中使用OnCollisionEnter2D。

void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.name == "Player")
    {
        PlayerPrefs.SetInt("Collision", 1);
    }
}


我希望能够检测到玩家何时与尖刺TileBase碰撞,因为这应该触发游戏结束。通过检查器设置为钉变量的资产名称在面板中也称为钉或钉(平铺)。

我尝试将碰撞检测添加到用于播放器资产的脚本中,以检查其与哪些对象碰撞

void OnCollisionEnter2D(Collision2D col)
{
    Debug.Log(col.gameObject.name);
}


但是返回的只是tilemap的名称。

最佳答案

首先,您应该将图层添加到对象中。一个简单的示例是将“ TileBase”或“ Tile”图层添加到TileBase对象。

然后,您可以允许您的播放器仅与某些东西发生碰撞,而不与您的图块碰撞。参见碰撞矩阵。

然后像这样修改您的代码:

void OnCollisionEnter2D(Collision2D col)
{
    var tilebase = col.GetComponent<TileBass>();
    if (tilebase != null)
    {
        Debug.Log(tilebase.gameObject.name);
    }
}

关于c# - 如何检查播放器和Unity中特定TileBase对象之间的冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54224376/

10-13 05:29