[Unity]StrangeIOCフレームワークにおけるDispatcherを用いたレスポンスプログラミング

3444 ワード

[Unity]技術学習路線図(長期更新)
[Unity]StrangeIOCフレームワークを用いたレスポンスプログラミング
ダウンロードとインストール
  • ダウンロードアドレスGitHub
  • StrangeIOCの特性紹介
    Strangeフレームワークの目的は,混乱したUnityプロジェクトコードにおいて,応答型プログラミング設計モードStrangeフレームワークで提供される特性の大部分がオプションであることを設計支援することである.EventDispatcherを使用してイベント配信機能を完了EventDispatcherはstrangeフレームワーク内のデフォルト配布システムである.Signals信号が1つの配布システムに追加される.EventDispatcherの使用手順
  • EventDispatcherオブジェクト
    private EventDispatcher dispatcher = new EventDispatcher();
    
  • を作成する.
  • 追加Listener傍受対象
    void Start () {
        //         'Fire' ,     CallBack  
        dispatcher.AddListener ("Fire", ((IEvent payload) => {
            Debug.Log(payload.data);
        }));
    }
    
  • は、Fire型の文字列
    //UGUI        
    public void DidClickButton()
    {
        dispatcher.Dispatch ("Fire", "     ");
    }
    
  • を配布する.
  • 応答の傍受者Listener
    dispatcher.RemoveListener ("Fire", ecb);
    
  • を削除する.
    特定のニーズを満たす
    プログラム内のゲームオブジェクトをキーボードで制御する必要がある場合は、次のコードで機能を完了できます.
  • HHGameController.cs
        using UnityEngine;
        using System.Collections;
        using strange.extensions.dispatcher.eventdispatcher.impl;
        using strange.extensions.dispatcher.eventdispatcher.api;
    
        public class HelloView : MonoBehaviour {
    
            // Use this for initialization
            //      
            public HHPlayer Player;
    
            //      
            private Event e;
            void OnGUI()
            {
                e = Event.current;
    
                if (e == null) {
                    return;
                }
    
                Player.Dispatcher.Dispatch (e.keyCode);
            }
        }
    
  • HHPlayer.cs
        using UnityEngine;
        using System.Collections;
        using strange.extensions.dispatcher.eventdispatcher.impl;
        using strange.extensions.dispatcher.eventdispatcher.api;
    
        public class HHPlayer:MonoBehaviour
        {
            private EventDispatcher _dispatcher = null;
            public EventDispatcher Dispatcher{
                get{ 
                    if (_dispatcher == null) {
                        _dispatcher = new EventDispatcher ();
                    }
    
                    return _dispatcher;
                }
            }
    
            void Start()
            {
                this.InitDispatcher ();
            }
    
            private void InitDispatcher()
            {
                EventCallback vertical_callback = ((IEvent payload) => {
                    Vector3 translate = new Vector3 ();
                    translate.x = 0f;
                    translate.y = 0f;
                    translate.z = Input.GetAxis ("Vertical") * 0.03f;
                    this.transform.Translate (translate);
                });
    
                EventCallback horizontal_callback = ((IEvent payload) => {
    
                    Vector3 rotate = new Vector3();
                    rotate.x = 0f;
                    rotate.y = 1f;
                    rotate.z = 0f;
                    this.transform.Rotate(rotate,Input.GetAxis("Horizontal"));
                });
    
                this.Dispatcher.AddListener (KeyCode.W, vertical_callback);
                this.Dispatcher.AddListener (KeyCode.S, vertical_callback);
                this.Dispatcher.AddListener (KeyCode.A, horizontal_callback);
                this.Dispatcher.AddListener (KeyCode.D, horizontal_callback);
            }
        }