今天超级简单!
判断两个球相交不相交,直接判断两个球心的距离是否大于两个半径的和就可以了。
检测代码
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; } }
运行结果