2017-03-16 21 views
5

Xin chào tất cả mọi người :) Dưới đây là tình hình:Prefab Collider2D không công nhận là Raycast Collider

Tôi có một prefab baddy trong đó có hai thành phần gia tốc: a CapsuleCollider2D đơn giản sử dụng cho vật lý, và kích hoạt chỉ PolygonCollider2D sử dụng cho va chạm điểm chuột .

Các PolygonCollider2D được cập nhật thông qua một kịch bản đính kèm (Baddy.cs) chỉ khi cần thiết sử dụng:

if(this.gameObject.GetComponent<PolygonCollider2D>()!=null){ 
    Destroy(this.gameObject.GetComponent<PolygonCollider2D>()); 
} 
this.gameObject.AddComponent<PolygonCollider2D>(); 
this.gameObject.GetComponent<PolygonCollider2D>().isTrigger=true; 

Có, đây là thực hành kém, nhưng nó có được của công việc làm. Nó hoạt động hoàn hảo: trong khung cảnh của trò chơi tôi có thể tạm dừng và thấy rằng có thực sự là một máy va chạm đa giác trên prefab baddy của chúng tôi.

Trong một kịch bản đính kèm (CollisionHandler.cs) chúng tôi kiểm tra cho một nền báo chí chuột trên baddy của chúng tôi:

if(MousePress()){ 
    hit=Physics2D.Raycast(level.mousePoint, Vector2.zero, 0f); 
    if(hit&&hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()){ 
     print("baddy mousePress"); 
    } 
} 

Tuy nhiên hit.collider==this.gameObject.GetComponent<PolygonCollider2D>() hóa ra sai sự thật, mặc dù tôi có thể in cả hit.colliderthis.gameObject.GetComponent<PolygonCollider2D>() ngay trước tay trong của chúng tôi if(MousePress()) và đã cả hai định nghĩa là:

D_Prefab(Clone) (UnityEngine.PolygonCollider2D) 

họ không thể PolygonColliders khác nhau bởi vì chỉ có thể có cùng một lúc, vì kịch bản remov Baddy của chúng tôi es và tạo đồng thời PolygonCollider.

Bất kỳ ý tưởng nào có thể xảy ra sai?

Trả lời

2

Bằng cách sử dụng Physics2D.RaycastAll với một lớpMask, tôi đã giải quyết được vấn đề của những người va chạm khác đang cản trở, bao gồm cả viên nang của riêng baddyCollider2D. May mắn thay, baddys của tôi sẽ đóng băng trước khi tôi cần kiểm tra va chạm chuột, vì vậy tôi đã cập nhật bộ xử lý trước khi tốc độ hoạt ảnh của baddy là 0. Rõ ràng tạo và loại bỏ các trình thu thập thông qua chức năng cập nhật không cung cấp đủ thời gian để xử lý va chạm.

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

Các vấn đề liên quan