调用Function

FunctionLua.lua.txt

  1. function NoParam()
  2. print('LuaFunction NoParam')
  3. end
  4. function HaveParam(a, b)
  5. print('LuaFunction HaveParam : ', 'a: ', a, 'b: ', b)
  6. end
  7. function HaveMultiParam(...)
  8. print(...)
  9. end
  10. function ReturnString()
  11. print('LuaFunction ReturnString')
  12. return "i am the return string!"
  13. end
  14. function ReturnFunction()
  15. print('LuaFunction ReturnFunction')
  16. return NoParam
  17. end
  18. function ReturnMultiValue()
  19. print("LuaFunction ReturnMultiValue")
  20. return true, "ReturnMultiValue", 1, "num"
  21. end

一、映射到Delegate

  1. /*
  2. * created by shenjun
  3. */
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using UnityEngine;
  7. using XLua;
  8. using System;
  9. namespace shenjun
  10. {
  11. public class FunctionToDelegate : MonoBehaviour {
  12. LuaEnv luaEnv = new LuaEnv();
  13. void Start () {
  14. luaEnv.DoString("require 'FunctionLua'");
  15. NoParam();
  16. HaveParam();
  17. HaveMultiParam();
  18. HaveReturnString();
  19. HaveReturnFunction();
  20. HaveMultiReturn();
  21. }
  22. void Update () {
  23. }
  24. private void OnDestroy()
  25. {
  26. luaEnv.Dispose();
  27. }
  28. #region 无参数
  29. void NoParam()
  30. {
  31. // 无返回值
  32. Action del1 = luaEnv.Global.Get<Action>("NoParam");
  33. del1();
  34. }
  35. #endregion
  36. #region 有两个参数
  37. [CSharpCallLua]
  38. public delegate void HaveParamDel(int a, int b);
  39. void HaveParam()
  40. {
  41. HaveParamDel del = luaEnv.Global.Get<HaveParamDel>("HaveParam");
  42. del(10, 20);
  43. }
  44. #endregion
  45. #region 有任意个参数
  46. [CSharpCallLua]
  47. public delegate void HaveMultiParamDel(params int[] nums);
  48. void HaveMultiParam()
  49. {
  50. HaveMultiParamDel del = luaEnv.Global.Get<HaveMultiParamDel>("HaveMultiParam");
  51. del(10, 20, 30, 40);
  52. }
  53. #endregion
  54. #region 有字符串返回值
  55. [CSharpCallLua]
  56. public delegate string HaveReturnStringDel();
  57. void HaveReturnString()
  58. {
  59. HaveReturnStringDel del = luaEnv.Global.Get<HaveReturnStringDel>("ReturnString");
  60. string r = del();
  61. Debug.Log("GetResturn :" + r);
  62. }
  63. #endregion
  64. #region 有方法返回值
  65. [CSharpCallLua]
  66. public delegate Action HaveReturnFunctionDel();
  67. void HaveReturnFunction()
  68. {
  69. HaveReturnFunctionDel del = luaEnv.Global.Get<HaveReturnFunctionDel>("ReturnFunction");
  70. Action result = del();
  71. result();
  72. }
  73. #endregion
  74. #region 多返回值
  75. // 多返回值的,返回值从左到右的依次映射,返回值,out参数或ref参数 。。。
  76. [CSharpCallLua]
  77. public delegate bool HaveMultiReturnDel(ref string a, out int b);
  78. void HaveMultiReturn()
  79. {
  80. HaveMultiReturnDel del = luaEnv.Global.Get<HaveMultiReturnDel>("ReturnMultiValue");
  81. string a = "";
  82. int b;
  83. bool result = del(ref a, out b);
  84. Debug.Log("result :" + result + ", a :" + a + ", b :" + b);
  85. }
  86. #endregion
  87. }
  88. }

二、映射到LuaFunction

  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 FunctionToLuaFunction : MonoBehaviour {
  11. LuaEnv luaEnv = new LuaEnv();
  12. void Start () {
  13. luaEnv.DoString("require 'FunctionLua'");
  14. NoParam();
  15. HaveParam();
  16. HaveReturnString();
  17. HaveReturnFunction();
  18. HaveMultiReturn();
  19. }
  20. void Update () {
  21. }
  22. private void OnDestroy()
  23. {
  24. luaEnv.Dispose();
  25. }
  26. #region 无参数
  27. void NoParam()
  28. {
  29. LuaFunction del = luaEnv.Global.Get<LuaFunction>("NoParam");
  30. del.Call();
  31. }
  32. #endregion
  33. #region 有参数
  34. void HaveParam()
  35. {
  36. LuaFunction del = luaEnv.Global.Get<LuaFunction>("HaveParam");
  37. del.Call(10, 20);
  38. }
  39. #endregion
  40. #region 有返回值是字符串
  41. void HaveReturnString()
  42. {
  43. LuaFunction del = luaEnv.Global.Get<LuaFunction>("ReturnString");
  44. object[] r = del.Call();
  45. Debug.Log(r[0]);
  46. }
  47. #endregion
  48. #region 有返回值是方法
  49. void HaveReturnFunction()
  50. {
  51. LuaFunction del = luaEnv.Global.Get<LuaFunction>("ReturnFunction");
  52. object[] result = del.Call();
  53. ((LuaFunction)result[0]).Call();
  54. }
  55. #endregion
  56. #region 多返回值
  57. void HaveMultiReturn()
  58. {
  59. LuaFunction del = luaEnv.Global.Get<LuaFunction>("ReturnMultiValue");
  60. object[] result = del.Call();
  61. Debug.Log("result :" + (bool)result[0] + ", " + (string)result[1] + ", " + int.Parse(result[2]+"") + ", " + (string)result[3]);
  62. }
  63. #endregion
  64. }
  65. }

?