以下の内容はhttps://baba-s.hatenablog.com/entry/2022/08/23/090000より取得しました。


【Unity】GetComponent の結果をキャッシュしておくためのクラス

ソースコード

using UnityEngine;

namespace Kogane
{
    /// <summary>
    /// GetComponent の結果をキャッシュしておくためのクラス
    /// </summary>
    public sealed class ComponentCache<T>
    {
        private T    m_cache;
        private bool m_isCached;

        public T Get( GameObject gameObject )
        {
            // UnityEngine.Object の null チェックは少し負荷がかかるため
            // bool 値で判定するようにしています
            if ( m_isCached ) return m_cache;
            if ( m_cache != null ) return m_cache;

            m_cache    = gameObject.GetComponent<T>();
            m_isCached = m_cache != null;

            return m_cache;
        }
    }
}

使用例

Before

using UnityEngine;

public class Example : MonoBehaviour
{
    private Rigidbody m_rigidbodyCache;

    public Rigidbody rigidbody
    {
        get
        {
            if ( m_rigidbodyCache == null )
            {
                m_rigidbodyCache = GetComponent<Rigidbody>();
            }

            return m_rigidbodyCache;
        }
    }

    private void Awake()
    {
        Debug.Log( rigidbody );
    }
}

After

using Kogane;
using UnityEngine;

public class Example : MonoBehaviour
{
    private readonly ComponentCache<Rigidbody> m_rigidbodyCache = new ();

    public Rigidbody rigidbody => m_rigidbodyCache.Get( gameObject );

    private void Awake()
    {
        Debug.Log( rigidbody );
    }
}

プロパティの定義が短くなってコードがスッキリする




以上の内容はhttps://baba-s.hatenablog.com/entry/2022/08/23/090000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14