カスタムコライダーを使用するゲームの衝突システムに取り組んでいます。これを使用して、衝突のバウンディング ボックスを作成しました。
ボックスの作成に right と forward の値が使用されているボックスで問題が発生しています。それ以外の場合は正常に動作します。立方体の 8 ポイントを計算する際に、右方向と前方方向のベクトルを含める方法を知っている人は誰でもいます。
以下は、ポイントを計算するための私のコードです。
public static void GetBoundsPointsNoAlloc(BoxRegion bx, Matrix4x4 colliderBox4x4,Vector3[] points, Matrix4x4 mx) {
Transform tr = Utils.FromMatrix4x4(ref DebugCollisionTestSphere.trans,mx);
Vector3 v3Center = bx.center;
Vector3 v3ext = bx.GetExtents();
Vector3 right = bx.right;
Vector3 forw = bx.forward;
//Quaternion qua =Quaternion.LookRotation(bx.forward,Vector3.Cross (bx.forward, bx.right));
//tr.TransformDirection (bx.forward);
//tr.localRotation = qua;
tr.forward = bx.forward;
tr.right = bx.right;
//tr.rotation = qua;
points [0] = tr.TransformPoint (new Vector3 (v3Center.x - v3ext.x, v3Center.y + v3ext.y, v3Center.z - v3ext.z)); // Front top left corner
points [1] = tr.TransformPoint (new Vector3 (v3Center.x + v3ext.x, v3Center.y + v3ext.y, v3Center.z - v3ext.z)); // Front top right corner
points [2] = tr.TransformPoint (new Vector3 (v3Center.x - v3ext.x, v3Center.y - v3ext.y, v3Center.z - v3ext.z)); // Front bottom left corner
points [3] = tr.TransformPoint (new Vector3 (v3Center.x + v3ext.x, v3Center.y - v3ext.y, v3Center.z - v3ext.z)); // Front bottom right corner
points [4] = tr.TransformPoint (new Vector3 (v3Center.x - v3ext.x, v3Center.y + v3ext.y, v3Center.z + v3ext.z)); // Back top left corner
points [5] = tr.TransformPoint (new Vector3 (v3Center.x + v3ext.x, v3Center.y + v3ext.y, v3Center.z + v3ext.z)); // Back top right corner
points [6] = tr.TransformPoint (new Vector3 (v3Center.x - v3ext.x, v3Center.y - v3ext.y, v3Center.z + v3ext.z)); // Back bottom left corner
points [7] = tr.TransformPoint (new Vector3 (v3Center.x + v3ext.x, v3Center.y - v3ext.y, v3Center.z + v3ext.z)); // Back bottom right corner
}
クォータニオンを適用して変換すると、ボックスの位置が変化する