预制的Collider2D不被识别为射线碰撞体

5

大家好 :) 这是情况:

我有一个坏蛋预制件,其中包含两个碰撞器组件:一个简单的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;

是的,这样做不太好,但可以完成工作。它可以完美地工作:在游戏中的场景视图中,我可以暂停并查看我们的坏人预制件上确实有一个多边形碰撞器。

在另一个附加的脚本(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>() 的结果是 false,即使在我们的 if(MousePress()) 中,我可以立即打印出 hit.colliderthis.gameObject.GetComponent<PolygonCollider2D>() 并且它们都有定义:

 D_Prefab(Clone) (UnityEngine.PolygonCollider2D)

由于我们的Baddy脚本同时删除和创建PolygonCollider,所以它们不能是不同的PolygonCollider,因为一次只能有一个。

您有什么想法可能出了什么问题吗?

1个回答

2
通过使用带有layerMask的Physics2D.RaycastAll,我解决了其他碰撞器的问题,包括坏蛋自己的capsuleCollider2D。幸运的是,在需要检测鼠标碰撞之前,我的坏蛋会冻结,因此当坏蛋的动画速度为0时,我提前更新了碰撞器。显然,通过update函数创建和删除碰撞器不足以给系统足够的时间来处理碰撞。
原文链接:http://answers.unity3d.com/questions/1326583/prefab-collider2d-not-recognized-as-raycast-collid.html#comment-1327337

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接