2017-03-16 32 views
5

大家好:)这里的情况:预制Collider2D不承认光线投射撞机

我有一个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),我们检查我们的baddy鼠标按:

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>()原来假的,即使我可以立即在手之前打印既hit.colliderthis.gameObject.GetComponent<PolygonCollider2D>()我们if(MousePress())并将它们都定义为:

D_Prefab(Clone) (UnityEngine.PolygonCollider2D) 

他们不可能是不同PolygonColliders,因为只能有一次一个,因为我们的Baddy脚本祛瘀es并同时创建PolygonCollider。

任何想法可能会出错?

回答

2

通过将Physics2D.RaycastAll与layerMask结合使用,我解决了其他碰撞体的问题,包括baddy自己的capsuleCollider2D。幸运的是,在我需要检查鼠标碰撞之前,我的坏人会冻结,所以当baddy的动画速度为0时,我提前更新了碰撞器。显然,通过更新函数创建和移除碰撞器并不会给系统足够的时间来处理碰撞。

http://answers.unity3d.com/questions/1326583/prefab-collider2d-not-recognized-as-raycast-collid.html#comment-1327337