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

lua,list,dictionary · 浏览次数 : 0

小编点评

Sure, here's the summary of the content you provided: **lua脚本调用C#中的List和Dictionary调用还是在上文中使用的C#脚本中Student类** * 在lua脚本中,需要使用`System.Collections.Generic`中的数据结构类型来存储List和Dictionary。 * 在lua脚本中,可以使用`Add()`方法添加数据到List和Dictionary中。 * 在lua脚本中,可以使用`foreach`迭代器遍历List和Dictionary中的元素。 * 在lua脚本中,可以使用`GetEnumerator()`方法遍历Dictionary中的键值对。 * 在lua脚本中,可以使用`yield`关键字实现迭代器。 * 在lua脚本中,可以使用`CustomSetting`中定义扩展类,并通过`Student`类继承它。 * 在`CustomSetting`中,可以使用`SingSunny()`方法调用`Student`类中的`Speak()`方法。 * 在`CustomSetting`中,可以使用`Student`类中的`list`属性访问List中的元素,并使用`Dictionary`类中的`dic`属性访问字典中的元素。 **其他重要信息** * `System.Collections.Generic`中的数据结构类型在lua中是无法直接访问的,需要使用`System.Collections.Generic`的接口或委托来访问。 * `CustomSetting`中的`Student`类是一个扩展类,它继承了`Student`类。 * `CustomSetting`中定义了`SingSunny()`方法,该方法可以被`Student`类中的`Speak()`方法调用。 * 通过`CustomSetting`中定义的扩展类,可以在lua脚本中利用C#中的语言特性来调用`Student`类中的方法。

正文

[10]Lua脚本调用C#中的List和Dictionary

调用还是在上文中使用的C#脚本中Student类:

image-20240518221946523

lua脚本:

print("------------访问使用C#脚本中的List和Dictionary-----------")

student.list:Add(2024)
student.list:Add(5)
student.list:Add(18)
local listSize = student.list.Count
print("list长度".. tostring(listSize))

--遍历list
for i = 0,listSize - 1 do
    print("--->" .. student.list[i])
end 

print(student.list)

student.dic:Add(1,"北京")
student.dic:Add(2,"上海")
student.dic:Add(3,"广州")
student.dic:Add(4,"深圳")
--遍历dic
--使用迭代器遍历键值对
local iterDic = student.dic:GetEnumerator()
while iterDic:MoveNext() do
    local val = iterDic.Current.Value
    print("--->" .. iterDic.Current.Key .. "---".. val)
end 

--单独遍历键
local iterDicKey = student.dic.Keys:GetEnumerator()
while iterDicKey:MoveNext() do
    print("键---" .. iterDicKey.Current)
end

--遍历值
local iterDicVal = student.dic.Values:GetEnumerator()
while iterDicVal:MoveNext() do
    print("值---" .. iterDicVal.Current)
end 

----------------------在lua脚本中新增C#中的dic和list
----比较麻烦 需要新添加要增加的数据结构类型
--新增list
local list2 = System.Collections.Generic.List_int()
list2:Add(5)
list2:Add(16)
print("list2[0]" .. list2[0])
print("list2[1]" .. list2[1])

--新增加字典
local dic2 = System.Collections.Generic.Dictionary_int_string()
dic2:Add(521,"我爱你")

local iterDic2 = dic2:GetEnumerator()
while iterDic2:MoveNext() do
    local key = iterDic2.Current.Key
    local val = iterDic2.Current.Value
    print("Dic2---" .. key .. "--" .. val)
end

image-20240518221652873

CustomSetting中新增的使用的C#中的数据结构类型,就此可以体会一下lua中的userdata的数据类型!

image-20240518222011050

[11]Lua中调用C#类中的拓展方法

在lua中调用Student类的拓展方法

--调用拓展类中的方法
local Jack = TestScripts.Student("Jack")
--调用拓展方法 . 调用需要传一个自身引用
Jack.SingSunny(self)
--或者 使用 :调用 
Jack:SingSunny() 

所调用的C#脚本中的类:

 public static class Tools
 {
     public static void SingSunny(this Student student)
     {
         Debug.Log("我在唱周董的晴天!");
     }
 }
public class Student
{
    private string _name;

    public Student(string name)
    {
        _name = name;
    }

    public void Speak()
    {
        Debug.Log("my name is " + _name);
    }
    //+ 新增数组内容
    public int[] array = new int[5] { 1, 2, 3, 4, 5 };

    public List<int> list = new List<int>() { 6, 7, 8, 9, 10 };

    public Dictionary<int, string> dic = new Dictionary<int, string>();

}

CustomSetting中将拓展类Tools和被拓展的类Student相关联:

image-20240518225846467

调用结果打印:

image-20240518230124339

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

热更学习笔记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

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

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

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研发团队,也需要类似的热更新技术。