stonstad 发表于 2022-5-17 13:39

自学xLua时的几个小问题

对于大部分问题大家可参考官方文档,这里仅记录笔者学习过程中的问题1. xLua安装问题



将Assets目录下的文件全部复制粘贴到Unity工程的Assets目录下即可,可以简单看到有两个Unity特有的meta文件,不用引擎自动生成。
2. try to dispose a luaenv with c# callback的错误问题

错误原因主要是以下两个:

[*]在同一个方法中创建了delegate的引用,但又立即释放引用并调用了LuaEnv.Dispose()

public delegate double LuaMax(double a, double b)
void Start()
      {
            LuaEnv luaenv = new LuaEnv();
            var max = luaenv.Global.GetPath<LuaMax>("math.max");
            Debug.Log(max(1,2));
            max = null;
            luaenv.Dispose();
      }
解决办法:在类内方法外定义Lua虚拟机,释放delegate对Lua方法的引用和LuaEnv.Dispose()这两步写在不用的方法中。

[*]没有在C#侧释放标记有的delegate(赋值为null)
3. 特性的作用

Serializable是.Net自带的序列化,有时候我们会自定义一些单独的class/struct,,由于这些类并没有从 MonoBehavior 派生,所以默认并不被Unity3D识别为可以Serialize的结构,自然也就不会在Inspector中显示。我们可以通过添加 这个Attribute使Unity3D检测并注册这些类为可Serialize的类型。具体做法如下:

public class FooBar
{   
    public int foo = 5;   
    public int bar = 10;

PS:Serializable只可以对class,struct,enum,delegate进行序列化,不可以对属性序列化;
还有 Attribute,强制unity去序列化一个私有域。
PS:这里在单机游戏上有一个游戏存档的应用,相比于PlayerPrefs的方式,可以结构化地存储游戏存档,具体方式为C#序列化的方式,将游戏数据类定义可序列化特性(只会序列化属性,不会序列化函数),由BinaryFormatter.Serialize将序列化数据转换为二进制字节流存储在本地,加载游戏时同样由BinaryFormatter.Deserialize将游戏存档反序列化之后读取出来。
页: [1]
查看完整版本: 自学xLua时的几个小问题