调用事件

CallCSEvent.lua.txt

  1. local callEvent = CS.UnityEngine.Object.FindObjectOfType(typeof(CS.shenjun.CallEvent))
  2. -- 注册静态方法
  3. callEvent:onClick('+', CS.shenjun.CallEvent.StaticTest)
  4. callEvent:onValueChanged('+', CS.shenjun.CallEvent.StaticTest)
  5. -- 取消注册的静态方法
  6. callEvent:onClick('-', CS.shenjun.CallEvent.StaticTest)
  7. callEvent:onValueChanged('-', CS.shenjun.CallEvent.StaticTest)
  8. -- 注册一个实例方法 错误
  9. -- callEvent:onClick('+', callEvent.Test)
  10. function test1()
  11. print('lua no param')
  12. end
  13. function test2(n)
  14. print('lua have param :', n)
  15. end
  16. -- 注册lua方法
  17. callEvent:onClick('+', test1)
  18. callEvent:onValueChanged('+', test2)
  19. -- 调用事件执行
  20. callEvent:Invoke(10)

CallCSEvent.cs

  1. /*
  2. * created by shenjun
  3. */
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using UnityEngine;
  7. using XLua;
  8. namespace shenjun
  9. {
  10. public class CallEvent : MonoBehaviour {
  11. public event System.Action onClick;
  12. [CSharpCallLua]
  13. public delegate void Del(int n);
  14. public event Del onValueChanged;
  15. void Start () {
  16. LuaEnv luaEnv = new LuaEnv();
  17. luaEnv.DoString("require 'CallCSEvent'");
  18. onClick = null;
  19. onValueChanged = null;
  20. luaEnv.Dispose();
  21. }
  22. void Update () {
  23. }
  24. public void Test()
  25. {
  26. Debug.Log("CS Func");
  27. }
  28. public static void StaticTest(int value = 0)
  29. {
  30. Debug.Log("CS Static Func :" + value);
  31. }
  32. public void Invoke(int value = 0)
  33. {
  34. if(onClick != null)
  35. {
  36. onClick.Invoke();
  37. }
  38. if(onValueChanged != null)
  39. {
  40. onValueChanged(value);
  41. }
  42. }
  43. }
  44. }

?