GameObject缩放后的边界



我正在编写代码来计算gameObject的盒子碰撞器。当我使用GetBounds()方法而不缩放对象时,该方法可以完美地工作。相反,如果我缩放对象(使用localScale),然后启动GetBounds()方法,则盒子碰撞器看起来非常小。提前感谢您的任何建议。

这是我使用的代码:

bool boxC = false;
BoxCollider collider;
Bounds bounds = new Bounds();
bounds.size = Vector3.zero;
bounds.center = Vector3.zero;
Renderer[] renderers = this.GetComponentsInChildren<Renderer>();
bool hasBounds = false;
if (renderers.Length > 0)
{
foreach (Renderer renderer in renderers)
{
if (renderer != null)
{
if (hasBounds)
{
bounds.Encapsulate(renderer.bounds);
}
else
{
bounds = renderer.bounds;
hasBounds = true;
}
}
}
}
if (this.GetComponent<BoxCollider>() == null)
this.gameObject.AddComponent<BoxCollider>();
collider = this.GetComponent<BoxCollider>();
collider.center = bounds.center - this.transform.position;
collider.size = bounds.size;
collider.center = new Vector3(collider.center.x, collider.center.y, 0);

我知道这个问题已经有一段时间了,但这里有一个解决方案。如果将代码中计算的边界除以对象的比例,应该可以解决问题。

Vector3 assetScale = assetTransform.localScale;
//assetTransform could be this.transform
collider.size = new Vector3(collider.size.x/assetScale.x,collider.size.z/assetScale.y,collider.size.z/assetScale.z);

最新更新