MRが楽しい

MRやVRについて学習したことを書き残す

UnityのInspectorビューに自作の構造体を表示する

本日は Unity の小ネタ枠です。
UnityのInspectorビューに自作の構造体を表示する方法を記事にします。

実装サンプル

例えば以下のようなアニメーションで利用する情報をまとめた構造体を作成します。
・HoloMonAnimation.cs

using UnityEngine;
using UniRx;

namespace HMProject.HoloMon
{
    public class HoloMonAnimationSingleton : MonoBehaviour
    {
        /// <summary>
        /// ホロモンアニメーション情報構造体
        /// </summary>
        struct HoloMonAnimationInfo
        {
            /// <summary>
            /// 追跡状態
            /// </summary>
            public bool trackingMode;

            /// <summary>
            /// モデル速度
            /// </summary>
            public float speed;
        }

        /// <summary>
        /// ホロモンアニメーション情報
        /// </summary>
        [SerializeField, Tooltip("ホロモンアニメーション情報")]
        private HoloMonAnimationInfo p_HoloMonAnimationInfo;
        
        // ..略..
        
    }
}

このスクリプトをオブジェクトに設定して Inspector ビューを確認します。
すると、以下のように p_HoloMonAnimationInfo の変数は表示されません。
f:id:bluebirdofoz:20210214232853j:plain

構造体を Inspector ビューで表示させるには構造体の定義をシリアル化しておく必要があります。
docs.unity3d.com

以下のように構造体の定義に[System.Serializable]を追加します。
・HoloMonAnimation.cs

using UnityEngine;
using UniRx;

namespace HMProject.HoloMon
{
    public class HoloMonAnimationSingleton : MonoBehaviour
    {
        /// <summary>
        /// ホロモンアニメーション情報構造体
        /// </summary>
        // Inspector ビューに表示するためシリアル化を行う
        [System.Serializable]
        struct HoloMonAnimationInfo
        {
            /// <summary>
            /// 追跡状態
            /// </summary>
            public bool trackingMode;

            /// <summary>
            /// モデル速度
            /// </summary>
            public float speed;
        }

        /// <summary>
        /// ホロモンアニメーション情報
        /// </summary>
        [SerializeField, Tooltip("ホロモンアニメーション情報")]
        private HoloMonAnimationInfo p_HoloMonAnimationInfo;
        
        // ..略..
        
    }
}

これで Inspector ビューに変数とその内容を表示できるようになりました。
f:id:bluebirdofoz:20210214232912j:plain