我有几个使用统一检查器设置的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/