Prefab Collider2D 未被识别为 Raycast Collider
Prefab Collider2D not Recognized as Raycast Collider
大家好:)情况如下:
我有一个 baddy 预制件,它有两个碰撞器组件:一个用于物理的简单 CapsuleCollider2D 和一个仅用于鼠标点碰撞的触发器 PolygonCollider2D。
PolygonCollider2D 仅在需要时通过附加脚本 (Baddy.cs) 更新:
if(this.gameObject.GetComponent<PolygonCollider2D>()!=null){
Destroy(this.gameObject.GetComponent<PolygonCollider2D>());
}
this.gameObject.AddComponent<PolygonCollider2D>();
this.gameObject.GetComponent<PolygonCollider2D>().isTrigger=true;
是的,这是一种糟糕的做法,但它完成了工作。它完美地工作:在游戏的场景视图中,我可以暂停并看到我们的 baddy 预制件上确实有一个多边形碰撞器。
在另一个附加脚本 (CollisionHandler.cs) 中,我们检查是否有鼠标按下我们的坏蛋:
if(MousePress()){
hit=Physics2D.Raycast(level.mousePoint, Vector2.zero, 0f);
if(hit&&hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()){
print("baddy mousePress");
}
}
然而 hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()
结果是错误的,即使我可以在我们的 if(MousePress())
中立即打印 hit.collider
和 this.gameObject.GetComponent<PolygonCollider2D>()
并将它们都定义为:
D_Prefab(Clone) (UnityEngine.PolygonCollider2D)
它们不可能是不同的 PolygonCollider,因为一次只能有一个,因为我们的 Baddy 脚本会同时删除和创建 PolygonCollider。
知道哪里出了问题吗?
通过将 Physics2D.RaycastAll 与 layerMask 一起使用,我解决了其他碰撞体妨碍的问题,包括 baddy 自己的 capsuleCollider2D。幸运的是,我的 baddys 在我需要检查鼠标碰撞之前会冻结,所以我在 baddy 的动画速度为 0 时提前更新了碰撞器。显然通过更新功能创建和删除碰撞器不会给系统足够的时间来处理碰撞。
大家好:)情况如下:
我有一个 baddy 预制件,它有两个碰撞器组件:一个用于物理的简单 CapsuleCollider2D 和一个仅用于鼠标点碰撞的触发器 PolygonCollider2D。
PolygonCollider2D 仅在需要时通过附加脚本 (Baddy.cs) 更新:
if(this.gameObject.GetComponent<PolygonCollider2D>()!=null){
Destroy(this.gameObject.GetComponent<PolygonCollider2D>());
}
this.gameObject.AddComponent<PolygonCollider2D>();
this.gameObject.GetComponent<PolygonCollider2D>().isTrigger=true;
是的,这是一种糟糕的做法,但它完成了工作。它完美地工作:在游戏的场景视图中,我可以暂停并看到我们的 baddy 预制件上确实有一个多边形碰撞器。
在另一个附加脚本 (CollisionHandler.cs) 中,我们检查是否有鼠标按下我们的坏蛋:
if(MousePress()){
hit=Physics2D.Raycast(level.mousePoint, Vector2.zero, 0f);
if(hit&&hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()){
print("baddy mousePress");
}
}
然而 hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()
结果是错误的,即使我可以在我们的 if(MousePress())
中立即打印 hit.collider
和 this.gameObject.GetComponent<PolygonCollider2D>()
并将它们都定义为:
D_Prefab(Clone) (UnityEngine.PolygonCollider2D)
它们不可能是不同的 PolygonCollider,因为一次只能有一个,因为我们的 Baddy 脚本会同时删除和创建 PolygonCollider。
知道哪里出了问题吗?
通过将 Physics2D.RaycastAll 与 layerMask 一起使用,我解决了其他碰撞体妨碍的问题,包括 baddy 自己的 capsuleCollider2D。幸运的是,我的 baddys 在我需要检查鼠标碰撞之前会冻结,所以我在 baddy 的动画速度为 0 时提前更新了碰撞器。显然通过更新功能创建和删除碰撞器不会给系统足够的时间来处理碰撞。