碰撞檢測之Sphere-Sphere檢測
阿新 • • 發佈:2019-02-20
今天超級簡單!
判斷兩個球相交不相交,直接判斷兩個球心的距離是否大於兩個半徑的和就可以了。
檢測程式碼
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; } }
執行結果