1. 程式人生 > >碰撞檢測之Sphere-Sphere檢測

碰撞檢測之Sphere-Sphere檢測

今天超級簡單!

判斷兩個球相交不相交,直接判斷兩個球心的距離是否大於兩個半徑的和就可以了。

檢測程式碼

public static bool IntersectSphereSphere(Sphere sphere0, Sphere sphere1)
        {
            Vector3 delta = sphere0.center - sphere1.center;
            return delta.sqrMagnitude <= (sphere0.radius + sphere1.radius) * (sphere0.radius + sphere1.radius);
        }

測試程式碼

public class SphereSphereTester : MonoBehaviour {
    public GameObject sphere0;
    public GameObject sphere1;

    Sphere _sphere0;
    Sphere _sphere1;

    // Use this for initialization
    void Start()
    {
        _sphere0 = new Sphere();
        _sphere1 = new Sphere();
    }

    // Update is called once per frame
    void Update()
    {
        UpdateShapes();
        if (NIntersectTests.IntersectSphereSphere(_sphere0, _sphere1))
        {
            sphere0.GetComponent<MeshRenderer>().materials[0].SetColor("_Color", new Color(1, 0, 0));
        } else
        {
            sphere0.GetComponent<MeshRenderer>().materials[0].SetColor("_Color", new Color(1, 1, 1));
        }
    }

    void UpdateShapes()
    {
        _sphere0.center = sphere0.transform.position;
        _sphere0.radius = 0.5f * sphere0.transform.localScale.x;

        _sphere1.center = sphere1.transform.position;
        _sphere1.radius = 0.5f * sphere1.transform.localScale.x;
    }
}


執行結果