[英]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)中,我们检查我们的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>()
结果为false,即使我可以在我们的if(MousePress())
之前立即打印hit.collider
和this.gameObject.GetComponent<PolygonCollider2D>()
if(MousePress())
,并让他们都定义为:
D_Prefab(Clone) (UnityEngine.PolygonCollider2D)
它们不能是不同的PolygonColliders,因为一次只能有一个,因为我们的Baddy脚本同时删除并创建了PolygonCollider。
什么想法可能会出错?
通过使用带有layerMask的Physics2D.RaycastAll,我解决了其他碰撞器阻碍的问题,包括baddy自己的capsuleCollider2D。 幸运的是,在我需要检查鼠标碰撞之前,我的baddys会冻结,因此我提前更新了对手,当baddy的动画速度为0.显然通过更新功能创建和移除碰撞器并不能给系统足够的时间来处理碰撞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.