カプセル型のGizmoを描画する方法です。
方針
Unityの標準ではカプセル型のGizmoが存在しません。
また半球型のGizmoもないため、きちんとカプセル型を描画しようとすると面倒です。
なので今回は若干手抜きですが、Gizmos.DrawWireSphere()とGizmos.DrawLine()を組み合わせて描きます。
若干見づらいですが、Gizmoの用途を考えれば大体のケースで十分かと思います。
ソースコード
それではソースコードです。
public void DrawCapsuleGizmo(Vector3 start, Vector3 end, float radius) { var preMatrix = Gizmos.matrix; // カプセル空間((0, 0)からZ軸方向にカプセルが伸びる空間)からワールド座標系への変換行列 Gizmos.matrix = Matrix4x4.TRS(start, Quaternion.FromToRotation(Vector3.forward, end), Vector3.one); // 球体を描画 var distance = (end - start).magnitude; var capsuleStart = Vector3.zero; var capsuleEnd = Vector3.forward * distance; Gizmos.DrawWireSphere(capsuleStart, radius); Gizmos.DrawWireSphere(capsuleEnd, radius); // ラインを描画 var offsets = new Vector3[]{ new Vector3(-1.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f), new Vector3(1.0f, 0.0f, 0.0f), new Vector3(0.0f, -1.0f, 0.0f) }; for (int i = 0; i < offsets.Length; i++) { Gizmos.DrawLine(capsuleStart + offsets[i] * radius, capsuleEnd + offsets[i] * radius); } Gizmos.matrix = preMatrix; }
カプセルを構成する二つの半球の中心点のワールド座標と、半球の半径を与えることでGizmoが描画されます。
結果
上のメソッドを実行した結果は次のようになります。
カプセル型のGizmoが描画されました。