以下の内容はhttps://baba-s.hatenablog.com/entry/2023/12/31/161107より取得しました。


【Unity】シンプルな Pub / Sub パターン

ソースコード

using System;
using System.Collections.Generic;

namespace Kogane
{
    /// <summary>
    /// Pub / Sub パターン
    /// </summary>
    public static class MessageBroker
    {
        //================================================================================
        // 変数(static)
        //================================================================================
        private static Dictionary<Type, object> m_callbacksTable = new();

        //================================================================================
        // 関数(static)
        //================================================================================
#if UNITY_EDITOR
        /// <summary>
        /// Unity 再生時に呼び出されます
        /// </summary>
        [UnityEditor.InitializeOnEnterPlayMode]
        private static void InitializeOnEnterPlayMode()
        {
            m_callbacksTable = new();
        }
#endif

        /// <summary>
        /// コールバックを追加します
        /// </summary>
        public static void Add<T>( Action<T> callback )
        {
            var type = typeof( T );

            if ( !m_callbacksTable.ContainsKey( type ) )
            {
                m_callbacksTable[ type ] = new List<Action<T>>();
            }

            var callbacks = ( List<Action<T>> )m_callbacksTable[ type ];
            callbacks.Add( callback );
        }

        /// <summary>
        /// コールバックを削除します
        /// </summary>
        public static void Remove<T>( Action<T> callback )
        {
            var type = typeof( T );

            if ( !m_callbacksTable.ContainsKey( type ) ) return;
            if ( m_callbacksTable[ type ] == null ) return;

            var callbacks = ( List<Action<T>> )m_callbacksTable[ type ];
            callbacks.Remove( callback );
        }

        /// <summary>
        /// データを送信します
        /// </summary>
        public static void Send<T>( T data )
        {
            var type = typeof( T );

            if ( !m_callbacksTable.TryGetValue( type, out var value ) ) return;

            var callbacks = ( List<Action<T>> )value;

            if ( callbacks is not { Count: > 0 } ) return;

            foreach ( var callback in callbacks )
            {
                callback( data );
            }
        }
    }
}



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

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