プロジェクト後期Luaアクセスノート06--ボタンイベントの傍受とメッセージ配信
4586 ワード
ボタンイベントリスニングNGUIは一般的にUIIEvenetListenerとして一般的に使用されており、使用方法は以下の通りである.
Luaコードでの使い方も悪くない
メッセージ配信については、Luaには同様の機能を実現するEventがありますが、私たちのニーズはlua内部配信だけでなく、他のluaに変更されていないスクリプトにも関連しています.そのため、私たちは自分のゲームフレームワーク内のメッセージメカニズムを使用しています.基礎原理は以前の文章を参照することができます.では、Luaで使用するには、どのように使用するか、ここでいくつかの修正が必要です.現在のluaコールバックを格納する辞書を定義します
次にlua呼び出しに対するメッセージメカニズムを書きます
ここで主なコードはluaから送られてきた情報で、複数のパラメータがあり、c#の中のメッセージデータは汎用的な制約を行い、APIコードを見てこの関数を発見し、ちょうど私たちのニーズを満たしています.
書き終わったらこのようなwrapをluaに使用し、luaでコードを呼び出すのは以下の通りです.
UIEventListener.Get(gameObject).onClick = BtnClick;
Luaコードでの使い方も悪くない
UIEventListener.Get(gameObject).onClick = this.BtnClick;
メッセージ配信については、Luaには同様の機能を実現するEventがありますが、私たちのニーズはlua内部配信だけでなく、他のluaに変更されていないスクリプトにも関連しています.そのため、私たちは自分のゲームフレームワーク内のメッセージメカニズムを使用しています.基礎原理は以前の文章を参照することができます.では、Luaで使用するには、どのように使用するか、ここでいくつかの修正が必要です.現在のluaコールバックを格納する辞書を定義します
static public Dictionary<int, List> luaEventTable = new Dictionary<int, List>();
次にlua呼び出しに対するメッセージメカニズムを書きます
static public void LuaAddListener(int eventType, LuaFunction lf)
{
if (luaEventTable.ContainsKey(eventType))
{
luaEventTable[eventType].Add(lf);
}
else
{
List list = new List();
list.Add(LuaFunction);
luaEventTable.Add(eventType, list);
}
}
static public void LuaRemoveListener(int eventType, LuaFunction lf)
{
if (luaEventTable.ContainsKey(eventType))
{
if (luaEventTable[eventType].Contains(lf))
{
luaEventTable[eventType].Remove(lf);
}
}
}
static public void LuaBroadcast(int eventType, params object[] obj)
{
Broadcast2Lua(eventType, obj);
Delegate d;
if (eventTable.TryGetValue(eventType, out d))
{
d.DynamicInvoke(obj);
}
}
static private void Broadcast2Lua(int eventType, params object[] obj)
{
List list = null;
if (luaEventTable.TryGetValue(eventType, out list))
{
for (int j = 0; j < list.Count; j++)
{
list[j].Call(obj);
}
}
}
ここで主なコードはluaから送られてきた情報で、複数のパラメータがあり、c#の中のメッセージデータは汎用的な制約を行い、APIコードを見てこの関数を発見し、ちょうど私たちのニーズを満たしています.
d.DynamicInvoke(obj);
書き終わったらこのようなwrapをluaに使用し、luaでコードを呼び出すのは以下の通りです.
Messege.LuaAddListener(MessageID.LuaTest, this.Test);
Messege.LuaRemoveListener(MessageID.LuaTest, this.Test);
Messege.LuaBroadcast(MessageID.LuaTest, arg1,arg2,arg3);