我正在开发一个简单的2D Unity游戏(如果这是一个愚蠢的问题,我非常不熟悉。)我的玩家可以通过与敌人的碰撞来吃掉他们。这很好用,因为我只是为敌人选择了"is trigger“组件,并在我的Player类中使用了以下代码:
private void OnTriggerEnter2D(Collider2D other)
{
Debug.Log("Hit detected");
Destroy(other.gameObject);
transform.localScale += new Vector3(x, y, z);
}然而,这意味着放置在我的背景图像边界周围的对撞机并不能阻止敌人。解决这个问题的最好方法是什么?
发布于 2019-10-05 21:58:47
我不太明白你的问题。但是,您的碰撞似乎不起作用。因此,请记住,对于在游戏中实际发生的碰撞,您需要使用碰撞器,并且参与碰撞的两个元素中的一个需要具有刚体组件。
这将使物理在引擎中工作,这将触发不。要检查它是否正常工作,可以使用以下命令进行调试:
// called on collision
void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("OnCollisionEnter2D");
}发布于 2019-10-05 23:56:55
据我所知,你只想检测玩家和敌人之间的触发器,但你仍然希望这些触发器与场景中的物理物体碰撞,比如背景对撞机。
实现这一点的一种可能方法是,使用设置了触发器选项的碰撞器组件为player对象创建子对象,并将脚本附加到该对象以处理触发器。然后,使用层来分组你的玩家和敌人的对象,你可以取消检查他们之间的碰撞如下:编辑->项目设置->物理2D:“层碰撞矩阵”。
发布于 2019-10-06 03:20:33
你可以将脚本分配给任何敌人,在每一帧中检查与玩家的距离。然后,您可以取消选中“是触发器”
https://stackoverflow.com/questions/58247851
复制相似问题