ゲームビューでコライダーを可視化&動的に切替する
衝突判定の調整用に、テストプレイ中にColliderを可視化できないか調べてみると、Unity標準機能の「Physics Debugger」ではシーンビューでしか表示できません。
こちらの記事で紹介されている「ColliderVisualizer」を導入すると、ゲームビューでもColliderを表示できるようになります。感謝!
しかし、1つ問題が。筆者が制作中のゲームでは立ち/しゃがみ等の姿勢変化に合わせてプレイヤーのBoxColliderのPositionとScaleが変化するように設定しているのですが、その変化は反映されませんでした。
そこで、可視化されたColliderを動的に切替できるように少し改造してみました。
姿勢変化のタイミングで ColliderVisualizer.cs 内の「可視コライダーのTransformを設定する」メソッド “SetVisualizerTransform” を実行させます。
試行錯誤の末、なんとか思った通りに動作したスクリプトがこちらです↓
まずはColliderを設定しているプレイヤーオブジェクトに、下記のスクリプトを設定します。
※可視化だけならこの時点でできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using HC.Debug; [DisallowMultipleComponent] public class ShowCollider : MonoBehaviour { #region フィールド / プロパティ [SerializeField, Tooltip("可視コライダーの色")] private ColliderVisualizer.VisualizerColorType _visualizerColor; [SerializeField, Tooltip("メッセージ")] private string _message; [SerializeField, Tooltip("フォントサイズ")] private int _fontSize; [SerializeField, Tooltip("プレイヤー")] private GameObject _player; #endregion private void Awake() { _player.AddComponent().Initialize(_visualizerColor, _message, _fontSize); } } |
別途、対応するColliderを取得した上で、姿勢変化を制御するスクリプトから必要なタイミングで “SendMessage” を実行します。
1 2 3 4 5 6 7 8 9 10 11 |
Collider collider; void Start() { collider = _player.GetComponent<Collider>(); } void ChangePosture() { _player.SendMessage("SetVisualizerTransform", collider); } |
次に、ColliderVisualizer.cs 内の該当箇所を少し改造します。
1 2 3 4 5 6 7 8 9 |
private void SetVisualizerTransform(BoxCollider boxCollider) { // BoxColliderのプロパティを加味したTransformにする Transform visualizerTransform = _visualizer.transform; //visualizerTransform.localPosition += boxCollider.center; // 改造前 visualizerTransform.localPosition = boxCollider.center; // 改造後 //visualizerTransform.localScale = Vector3.Scale(visualizerTransform.localScale, boxCollider.size); // 改造前 visualizerTransform.localScale = boxCollider.size; // 改造後 } |
この改造無しでは、”SetVisualizerTransform” を実行する度に可視化Colliderの位置とサイズがだんだんズレてしまいます。BoxColliderでしか試していませんが、Sphere/Capsuleでも対応する箇所を同様に改造すれば良いかと思います。
ディスカッション
コメント一覧
まだ、コメントがありません