Tôi biết một cách để làm điều này, nếu bạn tạo các máy va chạm của mình theo chương trình. Xem mã nguồn sau:
using UnityEngine;
using System.Collections.Generic;
public class MultipleColliders : MonoBehaviour {
//Enumeration to tell us what a collider is for
enum ColliderType
{
Head,
Body
}
//A quick lookup for our colliders associated with this gameobject
Dictionary<Collider2D, ColliderType> Colliders;
void Start () {
InitColliders ();
}
//Programmatically create our colliders
void InitColliders()
{
Colliders = new Dictionary<Collider2D, ColliderType> ();
BoxCollider2D boxCollider = transform.gameObject.AddComponent (typeof(BoxCollider2D)) as BoxCollider2D;
boxCollider.offset = new Vector2 (0, -0.5f);
boxCollider.size = new Vector3 (0.5f, 1f);
Colliders.Add (boxCollider, ColliderType.Body);
CircleCollider2D circleCollider = transform.gameObject.AddComponent (typeof(CircleCollider2D)) as CircleCollider2D;
circleCollider.offset = new Vector2 (0, 0.5f);
circleCollider.radius = 0.5f;
Colliders.Add (circleCollider, ColliderType.Head);
}
//Check if our colliders were hit
void Update () {
//Raycast mouse cursor when pressed to simulate a hit for our example
if (Input.GetMouseButtonDown (0)) {
Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D[] hit = Physics2D.RaycastAll (mousePosition, Vector2.zero);
//lookup our hits to see what was hit
for (int i = 0; i < hit.Length; i++)
{
if (Colliders.ContainsKey(hit[i].collider)) {
Debug.Log ( System.Enum.GetName( typeof(ColliderType), Colliders[hit[i].collider]) + " HIT!");
}
}
}
}
}
Vì vậy, về cơ bản, làm theo cách này, sẽ cung cấp cho bạn các yêu cầu bạn cung cấp. Nó sẽ cho phép một gameobject chứa nhiều colliders mà không cần phải là một đối tượng con.
Nó cũng sẽ có thể cho bạn biết những gì máy va chạm đã bị bắn trúng.
Hãy cho tôi biết nếu bạn có câu hỏi về việc thực hiện này.