|
对于大部分问题大家可参考官方文档,这里仅记录笔者学习过程中的问题 1. xLua安装问题
将Assets目录下的文件全部复制粘贴到Unity工程的Assets目录下即可,可以简单看到有两个Unity特有的meta文件,不用引擎自动生成。
2. try to dispose a luaenv with c# callback的错误问题
错误原因主要是以下两个:
- 在同一个方法中创建了delegate的引用,但又立即释放引用并调用了LuaEnv.Dispose()
[CsharpCallLua]
public delegate double LuaMax(double a, double b)
void Start()
{
LuaEnv luaenv = new LuaEnv();
var max = luaenv.Global.GetPath<LuaMax>(&#34;math.max&#34;);
Debug.Log(max(1,2));
max = null;
luaenv.Dispose();
}
解决办法:在类内方法外定义Lua虚拟机,释放delegate对Lua方法的引用和LuaEnv.Dispose()这两步写在不用的方法中。
- 没有在C#侧释放标记有[CSharpCallLua]的delegate(赋值为null)
3. [System.Serializable]特性的作用
Serializable是.Net自带的序列化,有时候我们会自定义一些单独的class/struct,,由于这些类并没有从 MonoBehavior 派生,所以默认并不被Unity3D识别为可以Serialize的结构,自然也就不会在Inspector中显示。我们可以通过添加 [System.Serializable]这个Attribute使Unity3D检测并注册这些类为可Serialize的类型。具体做法如下:
[System.Serializable]
public class FooBar
{
public int foo = 5;
public int bar = 10;
}
PS:Serializable只可以对class,struct,enum,delegate进行序列化,不可以对属性序列化;
还有[SerializeField] Attribute,强制unity去序列化一个私有域。
PS:这里在单机游戏上有一个游戏存档的应用,相比于PlayerPrefs的方式,可以结构化地存储游戏存档,具体方式为C#序列化的方式,将游戏数据类定义可序列化特性(只会序列化属性,不会序列化函数),由BinaryFormatter.Serialize将序列化数据转换为二进制字节流存储在本地,加载游戏时同样由BinaryFormatter.Deserialize将游戏存档反序列化之后读取出来。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|