unity 计算物体包围盒
3.获取包围盒(通过MeshFilter)2.获取包围盒(通过Renderer)
·
1.获取中心点
public Vector3 GetCenter(GameObject target)
{
Renderer[] mrs = target.gameObject.GetComponentsInChildren<Renderer>();
Vector3 center = target.transform.position;
if (mrs.Length != 0)
{
Bounds bounds = new Bounds(center, Vector3.zero);
foreach (Renderer mr in mrs)
{
bounds.Encapsulate(mr.bounds);
}
center = bounds.center;
}
return center;
}
2.获取包围盒(通过Renderer)
public Bounds GetBounds(GameObject target, bool include_children = true)
{
Renderer[] mrs = target.gameObject.GetComponentsInChildren<Renderer>();
Vector3 center = target.transform.position;
Bounds bounds = new Bounds(center, Vector3.zero);
if (include_children)
{
if (mrs.Length != 0)
{
foreach (Renderer mr in mrs)
{
bounds.Encapsulate(mr.bounds);
}
}
}
else
{
Renderer rend = target.GetComponentInChildren<Renderer>();
if (rend)
{
bounds = rend.bounds;
}
}
return bounds;
}
3.获取包围盒(通过MeshFilter)
public Bounds GetLocalBounds(GameObject target, bool include_children = true)
{
MeshFilter[] mfs = target.gameObject.GetComponentsInChildren<MeshFilter>();
Vector3 center = target.transform.localPosition;
Bounds bounds = new Bounds(center, Vector3.zero);
if (include_children)
{
if (mfs.Length != 0)
{
foreach (MeshFilter mf in mfs)
{
if (mf.mesh)
{
bounds.Encapsulate(mf.mesh.bounds);
}
}
}
}
else
{
MeshFilter mf = target.GetComponentInChildren<MeshFilter>();
if (mf && mf.mesh)
{
bounds = mf.mesh.bounds;
}
}
return bounds;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)