您的位置:首页 > 移动开发 > Unity3D

碰撞检测之Sphere-Sphere检测

2016-03-01 23:43 507 查看
今天超级简单!
判断两个球相交不相交,直接判断两个球心的距离是否大于两个半径的和就可以了。
检测代码
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;
}
}


运行结果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息