当前位置:   article > 正文

Lua和Unity连接使用_unity+lua

unity+lua

Lua上使用Unity代码:

a=CS.UnityEngine

a.GameObject("Lua")    --创建新对象
camera=a.GameObject.Find('Main Camera')    --查找名字
camera=a.GameObject.FindWithTag('MainCamera')    --查找标签
input1=a.GameObject.Find("Name"):GetComponent(typeof(a.UI.InputField))    --获取输入框
btn = a.GameObject.Find("Res"):GetComponent(typeof(a.UI.Button))    --获取按钮
tt=a.GameObject.Find("Tapp"):GetComponent(typeof(a.UI.Text))    --获取文本

btn.onClick:AddListener(Clickone)    --获取方法委托

Unity上使用Lua代码:

1.引入特性[CSharpCallLua]

2.引入命名空间:using XLua;

3. 实例化对象 LuaEnv lua = new LuaEnv();

4.lua.DoString("require('Lua文件名')");//请求Lua文件内容

5.lua.Global.Get<>("Lua方法或模板");实例化Lua属性

 加载Txt文件

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using XLua;
  5. /*
  6. *创建者:
  7. *创建时间:
  8. *描述:只能加载Txt的文件
  9. *版本:
  10. */
  11. public class Test : MonoBehaviour
  12. {
  13. public int id = 1001;
  14. public void GetOne()
  15. {
  16. print("Hello");
  17. }
  18. public static void GetTwo()
  19. {
  20. print("World");
  21. }
  22. [CSharpCallLua]
  23. public delegate void Opens();//通过委托去映射Lua文件内的属性,方法
  24. LuaEnv lua;
  25. void Start()
  26. {
  27. GameObject g = new GameObject("天才");//创建空物体
  28. lua = new LuaEnv();
  29. lua.DoString("require('One')");//请求Lua文件内容
  30. Opens op = lua.Global.Get<Opens>("Init");
  31. op();
  32. }
  33. void OnDestory()
  34. {
  35. lua.Dispose();//关闭资源
  36. }
  37. }

加载Lua文件,可单独创建Lua文件夹去存放Lua文件

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using Unity.VisualScripting;
  6. using UnityEngine;
  7. using XLua;
  8. /*
  9. *创建者:
  10. *创建时间:
  11. *描述:
  12. *版本:
  13. */
  14. public class Person
  15. {
  16. public int id;
  17. public string name;
  18. }
  19. public class Test3 : MonoBehaviour
  20. {
  21. LuaEnv lua;
  22. Person p;
  23. [CSharpCallLua]
  24. public delegate int Count(object a, object b);//带参数的委托
  25. void Start()
  26. {
  27. lua = new LuaEnv();
  28. lua.AddLoader(FileLoad); //添加加载器(用于加载Lua文件)
  29. lua.DoString("require('Three')");//请求获取Lua文件
  30. //读取Lua数据
  31. int a = lua.Global.Get<int>("a");
  32. float b = lua.Global.Get<float>("b");
  33. string c = lua.Global.Get<string>("c");
  34. bool d = lua.Global.Get<bool>("d");
  35. print(a + "\t" + b + "\t" + c + "\t" + d);
  36. //通过类的方式映射Lua类(模板)
  37. p = lua.Global.Get<Person>("Student");
  38. print(p.id + "\t" + p.name);
  39. //通过集合映射Lua类(模板)
  40. List<object> list = lua.Global.Get<List<object>>("Student");
  41. foreach (var item in list)
  42. {
  43. print(item);
  44. }
  45. //通过字典映射Lua类(模板)
  46. Dictionary<object, object> dic = lua.Global.Get<Dictionary<object, object>>("Student");
  47. foreach (var item in dic)
  48. {
  49. print(item.Key + "\t" + item.Value);
  50. }
  51. //通过带参委托映射Lua中带参数的方法
  52. Count ct = lua.Global.Get<Count>("Sum");
  53. print(ct(1, 2));
  54. //用于获取带多个参数的Lua文件方法
  55. LuaFunction lf = lua.Global.Get<LuaFunction>("Sum");
  56. object[] obj = lf.Call(1, 2);
  57. foreach (var item in obj)
  58. {
  59. print(item);
  60. }
  61. }
  62. //以字节数组的形式存放Lua文件
  63. Byte[] FileLoad(ref string name)
  64. {
  65. string s = Application.dataPath + "/Lua/" + name + ".lua";
  66. return File.ReadAllBytes(s);//读取文件所有的字节
  67. }
  68. void OnDestory()
  69. {
  70. lua.Dispose();//关闭资源
  71. }
  72. }

Lua文件Three代码块:

  1. a=1
  2. b=1.2
  3. c='hello'
  4. d=true
  5. Student={
  6. id=1001,
  7. name="小霸王",
  8. Study=function()
  9. print(Student.name..'爱学习')
  10. end,
  11. 1111
  12. }
  13. function Sum(a,b)
  14. c=a+b
  15. return c
  16. end

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/95798
推荐阅读
相关标签
  

闽ICP备14008679号