我是游戏开发新手,我正在 Unity 中制作我的第一款游戏,这是一款自上而下的 2D 生存类型游戏。为了检测玩家何时击中树或其他世界对象,我在玩家的每一侧添加了不可见的触发器,每当您单击时我都会将其设置为活动状态。每当玩家或目标移动时,该系统都会完美运行,但是,当目标不移动(例如树)时,不会检测到碰撞。我认为 OnTriggerEnter 函数仅在移动物体与触发器碰撞时才起作用,但是,我不知道如何执行其他操作。我可以使用其他功能,或者可以通过某种方式解决这个问题吗?
void OnTriggerEnter2D(Collider2D other)
{
Debug.Log("hit");
if (other.gameObject.tag == "Tree")
{
Debug.Log("hit tree");
other.gameObject.GetComponent<TreeScript>().treeHealth--;
}
}
在此处输入图像描述对于仍然找到解决方案的人,在 Rigidbody 和 Rigidbody 2D 中,在睡眠模式下,将其更改为 Never Sleep,这将帮助 Rigidbody 不会自动睡眠并且不会从触发器获取事件。
您可以尝试:
private void OnCollisionEnter2D(Collision2D col)
{
}
如果两个对象在没有使用“触发”选项的情况下相互碰撞,则会调用
OnCollisionEnter2D
。
使用两种不同方法的快速示例如下:
在赛车游戏中使用
OnTriggerEnter2D()
方法,您想要检测汽车何时通过终点线,并且想要使用触发器,因为您实际上并不关心碰撞。
使用
OnCollisionEnter2D
方法检测 2 辆车何时相互碰撞并且您不希望 2 个物体相互穿过。