如何計算游戲物件(在立方體碰撞器內)與立方體碰撞器表面的距離?現有的計算是從立方體表面向外進行的,所以當我使用 collider.closestpoint 或 collider.closestpointonbounds 時我得到了 0。
uj5u.com熱心網友回復:
最簡單的(但在計算上不是最便宜的)是不依賴于當前對撞機的距離,而是在物件邊緣周圍添加一組小型對撞機(因此 6 個對撞機,立方體的每個面一個)。在所有 6 個面上使用Collider.ClosestPoint()
并計算這樣的距離將為您提供所需的結果。
uj5u.com熱心網友回復:
首先將一個點轉換為區域空間。
var localPoint = transform.InverseTransformPoint(worldPoint);
var extents = collider.size * 0.5f;
var closestPoint = localPoint;
計算到每個面的距離。
var disx = extents.x - Mathf.Abs(localPoint.x);
var disy = extents.y - Mathf.Abs(localPoint.y);
var disz = extents.z - Mathf.Abs(localPoint.z);
找到最近的面(最小距離)并沿該軸移動最近的點。
if(disx < disy)
{
if (disx < disz)
closestPoint.x = extents.x * Mathf.Sign(localPoint.x); //disx
else
closestPoint.z = extents.z * Mathf.Sign(localPoint.z); //disz
}
else
{
//......
}
加上對撞機的偏移量,轉換為世界空間。
closestPoint = collider.center;
transform.TransformPoint(closestPoint);
uj5u.com熱心網友回復:
您可以通過Vector3.Distance計算
一些例子
float minDistance =2;
float Distance = Vector3.Distance(other.position, transform.position);
if(Distance < minDistance)
{
//some code stuffs
}
else if(Distance > minDistance){
//some code stuffs
}
有關Vector3.Distance和從物件 源獲取距離的有用資訊: https ://docs.unity3d.com/ScriptReference/30_search.html?q=Distance
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475801.html
下一篇:如何讓游戲在策略之前等待?