大家好:)这是情况:
我有一个坏的预制件,它有两个对撞机组件:用于物理的简单CapsuleCollider2D和仅用于鼠标点碰撞的触发器PolygonCollider2D。
仅在需要时,才通过以下附件通过脚本(Baddy.cs)更新PolygonCollider2D:
if(this.gameObject.GetComponent<PolygonCollider2D>()!=null){
Destroy(this.gameObject.GetComponent<PolygonCollider2D>());
}
this.gameObject.AddComponent<PolygonCollider2D>();
this.gameObject.GetComponent<PolygonCollider2D>().isTrigger=true;
是的,这是很差的做法,但是可以完成工作。它的工作原理非常完美:在游戏的场景 View 中,我可以停下来,看看我们的不良预制件上确实存在多边形对撞机。
在另一个附加的脚本(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.collider
中同时打印this.gameObject.GetComponent<PolygonCollider2D>()
和if(MousePress())
并将它们都定义为: D_Prefab(Clone) (UnityEngine.PolygonCollider2D)
它们不能是不同的PolygonColliders,因为一次只能存在一个,因为我们的Baddy脚本会同时删除并创建PolygonCollider。
任何想法可能出什么问题吗?
最佳答案
通过将Physics2D.RaycastAll与layerMask结合使用,我解决了其他对撞机遇到的问题,包括坏家伙自己的capsuleCollider2D。幸运的是,在我需要检查鼠标碰撞之前,我的小家伙会卡住,因此当小家伙的动画速度为0时,我会提前更新对撞机。显然,通过更新功能创建和删除对撞机并没有给系统足够的时间来处理碰撞。
http://answers.unity3d.com/questions/1326583/prefab-collider2d-not-recognized-as-raycast-collid.html#comment-1327337
关于c# - Prefab Collider2D无法识别为Raycast Collider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42823809/