热更学习笔记--toLau中lua脚本对C#中枚举和数组的访问

tolau,lua · 浏览次数 : 0

小编点评

**C#脚本:** ```csharp public enum OUTSTANDING_STUDENTS { TonyChang, UrusWong, FrankLee, JackChow } public static void PrintEnum() { print("----------------------toLua中调用C#中枚举类型-------------------------\n"); print("PrimitiveType = UnityEngine.PrimitiveTypelocal cubeObj = GameObject.CreatePrimitive(PrimitiveType.Cube)--使用自定义枚举local tc = TestScripts.OUTSTANDING_STUDENTS.TonyChangprint(\"优秀学生代表----\" .. tostring(tc) .. \"排名\" .. tc:ToInt())local fl = TestScripts.OUTSTANDING_STUDENTS.IntToEnum(2)print("数值转枚举" .. tostring(fl))print("枚举值一样二者可以判等吗?\n"); print("----------------------访问C#中数组--------------------\n"); var student = TestScripts.Student("tony"); print("array的长度 " + student.array.Length); for (int i = 1; i <= student.array.Length; i++) { print("array[\"" + i + "\"] = \"" + student.array[i - 1] + "\"]"); } print("iter:" + student.array.GetEnumerator()); } ``` **Lua脚本:** ```lua function toLua(data) local table = {} for i, v in ipairs(data) do table[i] = v end return table end print("createArray.Length = ", toLua(createArray).Length) print(createArray) ``` **运行结果:** **C#脚本:** ``` ----------------------toLua中调用C#中枚举类型------------------------ PrimitiveType = UnityEngine.PrimitiveTypelocal cubeObj = GameObject.CreatePrimitive(PrimitiveType.Cube)--使用自定义枚举local tc = TestScripts.OUTSTANDING_STUDENTS.TonyChang 数值转枚举 优秀学生代表----排名 1 枚举值一样二者可以判等吗? ----------------------访问C#中数组-------------------- array的长度 10 array[0] = 9999 createArray[0] = 9999 createArray ``` **Lua脚本:** ``` createArray.Length = 10 print(createArray) ``` **总结:** 使用 `toLua` 函数将 C# 脚本中创建的数组转换为 Lua 表格。通过该方法,可以将 C# 中枚举类型的值和 C# 中数组的值进行互换。

正文

[8]Lua脚本调用C#中的枚举学习

--调用枚举类型
print("----------------------toLua中调用C#中枚举类型-------------------------")
PrimitiveType = UnityEngine.PrimitiveType
local cubeObj = GameObject.CreatePrimitive(PrimitiveType.Cube)
--使用自定义枚举
local tc = TestScripts.OUTSTANDING_STUDENTS.TonyChang
print("优秀学生代表----" .. tostring(tc) .. "排名" .. tc:ToInt())
local fl = TestScripts.OUTSTANDING_STUDENTS.IntToEnum(2)
print("数值转枚举" .. tostring(fl))

print("枚举值一样二者可以判等吗?")

local us =  TestScripts.OUTSTANDING_STUDENTS.UrusWong
local us2 = TestScripts.OUTSTANDING_STUDENTS.UrusWong
if us == us2 then
    print("一样")
else
    print("不一样")
end

调用的C#脚本新增内容

#region 枚举
  //在TestScripts命名空间下新增枚举类型
    public enum OUTSTANDING_STUDENTS
    {
        TonyChang,
        UrusWong,
        FrankLee,
        JackChow
    }

#endregion

运行结果

image-20240515230826214

[9]Lua脚本中调用C#中的数组

调用的C#脚本新增内容:

image-20240515235259197

Lua脚本中访问数组:

因为Array数组是在前文中的测试脚本TestScripts.Student类中声明创建的,所以开头先实例化Student对象。

使用Lua访问C#中数组时,可以通过层级结构获取到对应类的数组索引,按照C#中array数据结构类型来访问,

注意索引最大值,可以通过迭代器遍历访问,也可以将其转换为lua中的table,再遍历访问。

最后我们尝试再Lua中使用C#的array数组结构来创建使用数组

local student = TestScripts.Student("tony")
print("----------------------访问C#中数组--------------------")
print("array的长度" .. student.array.Length)
print("array[0]=".. tostring(student.array[0]))
print("5 在array中的索引是" .. tostring(student.array:IndexOf(5)))

--按照C#中array数组长度进行遍历访问
--所以长度要减一 才为最后一个索引
for i = 1, student.array.Length - 1 do
    print("array[" .. i .. "] = " .. student.array[i])    
end

--使用迭代器遍历
local iter = student.array:GetEnumerator()
while iter:MoveNext() do
    print("iter:" .. iter.Current)
end

--转成table再遍历
local aTable = student.array:ToTable()
for j=1,#aTable do
    print("aTable: " .. tostring(aTable[j]))
end 

--在lua中使用C#中的Array创建数组
--奇葩
local createArray = System.Array.CreateInstance(typeof(System.Int32), 10)
print("createArray.Length = " .. createArray.Length)
local createArray = System.Array.CreateInstance(typeof(System.Int32), 10)
createArray[0] = 9999
print("createArray[0] = " .. createArray[0])
print("createArray" .. createArray)

运行结果:

image-20240515235136442

注意:本两次在CustomSetting中新增的类型,之后重新生成wrap文件,在lua中才可以正常使用到。总之,使用toLua获取C#脚本中内容,则需要将脚本添加自定文件,并生成wrap文件。

img

与热更学习笔记--toLau中lua脚本对C#中枚举和数组的访问相似的内容:

热更学习笔记--toLau中lua脚本对C#中枚举和数组的访问

[8]Lua脚本调用C#中的枚举学习 --调用枚举类型 print(" toLua中调用C#中枚举类型 ") PrimitiveType = UnityEngine.PrimitiveType local cubeObj = GameObject.CreatePrimitive(PrimitiveT

热更学习笔记10~11----lua调用C#中的List和Dictionary、拓展类中的方法

[10]Lua脚本调用C#中的List和Dictionary 调用还是在上文中使用的C#脚本中Student类: lua脚本: print(" 访问使用C#脚本中的List和Dictionary ") student.list:Add(2024) student.list:Add(5) studen

Lua热更学习--使用toLua中的协程

[6] C#访问调table类中的成员变量和函数 访问table中的变量和函数 lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和function的获取调用,这里尝试获取调用。 依然是如此,此种调用方式获取到的table中的函数是引用拷贝。

Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本

[0]toLua的导入 下载toLua资源包,访问GitHub项目地址,点击下载即可。 将文件导入工程目录中: 导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击Generate All 重新生成(注意很可能是路径问题导致的生成失败!) 之后就可以开始编写脚本执行第一个lua程序了! [1]

[转帖]jvm crash when overwritten running jar

https://www.jianshu.com/p/bf0a051e4c63 现象 策划热更完配置表后 jvm直接就crash了(开发机linux) crash日志 日志分析 从crash日志看是reload配置表 使用Reflections扫描配置类 最终读取jar包 java.util.zip.

AR Engine毫秒级平面检测,带来更准确的呈现效果

近年来,AR版块成为时下大热,这是一种将现实环境中不存在的虚拟物体融合到真实环境里的技术,用户借助显示设备可以拥有真实的感官体验。AR的应用场景十分广泛,涉及娱乐、社交、广告、购物、教育等领域:AR可以让游戏更具互动性;商品通过AR展示更真实;使用AR进行教育教学让抽象事物更形象等,可以说AR技术已

quarkus实战之四:远程热部署

将本地的改动极速同步到远程服务端,并自动生效,掌握此技能,开发调试会更高效

发现了一个膨胀样式的css库

众所周知,对于前端来说css是最难的了,如果你遇到了一个脑洞大奇思妙想的产品,那就更难了。 很不巧,了不起就经受过这样的痛苦,产品经理看了HarmonyOS4的发布会,脑子一热就让设计师出了一套膨胀蓬松的UI 了不起经过调研,查找了上百个样式组件库,终于找到了一款合适的样式库——clay.css c

云小课|GaussDB(DWS)数据存储尽在掌控,冷热数据切换自如

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要: GaussDB(DWS)支持根据业务系统的不同使用需求,对膨胀的数据进行冷热分级管理,将数据按照时间分为热数据、冷数

Flutter热更新技术探索

APP发布到市场后,难免会遇到严重的BUG阻碍用户使用,因此有在不发布新版本APP的情况下使用热更新技术立即修复BUG需求。原生APP(例如:Android & IOS)的热更新需求已经比较成熟,但Flutter技术栈目前还缺少类似的技术方案,因此Flutter研发团队,也需要类似的热更新技术。