using UnityEditor; //扩展编辑器方法,放在Editor文件夹下 public class CreateAssetBundle { [MenuItem("Assets/Build AssetBundle")] public static void BuildAssetBundle(){ BuildPipeline.BuildAssetBundles ("Assets/14/AssetBundle",BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows); } }
MemuItem添加额外的菜单,菜单触发,这个方法就被调用
通过BuildPineline的BuildAssetBundles方法一键打包所有在Inspector下面分配了assetbundle名字和后缀的资源
参数一,打包的AssetBundle存放路径
参数二,一些选项,限制,压缩等
参数三,打包后的AssetBundle将用在那个平台
public void OutMethod(string str,out int length) { Console.WriteLine(str); length = str.Length; } public void RefMethod(string str, ref int length) { Console.WriteLine(str); Console.WriteLine(length); length = str.Length; } //Lua require "luanet" luanet.load_assembly("Lua") Program = luanet.import_type("Lua.Program") pro = Program() void,length = pro:OutMethod("chicai") print(void,length) void,length = pro:RefMethod("chicai",1000) print(void,length)
可以看出out和ref关键字在Lua中调用时,都会被当作返回值,void也会返回nil
其中out关键字声明的参数,直接不用传递参数过去
class Program { public string Name = "chicai"; public void Method() { Console.WriteLine("我是c#普通方法"); } } //Lua require "luanet" luanet.load_assembly("Lua") --引入程序集 Program = luanet.import_type("Lua.Program") --引入类 pro = Program() --构造类对象 print(pro.Name) --调用属性 pro:Method() --调用方法
在项目编译好的地方要加上程序集luanet.dll
在Lua中,通过luanet的load_assembly来加载c#程序集
再通过import_type获取到类
public void Method() { Console.WriteLine("我是c#普通方法"); } public static void StaticMethod() { Console.WriteLine("我是一个C#静态方法"); } Program p = new Program(); lua.RegisterFunction("NormalMethod", p, p.GetType().GetMethod("Method"));//注册普通方法public的 lua.DoString("NormalMethod()"); lua.RegisterFunction("StaticMethod", null, typeof(Program).GetMethod("StaticMethod"));//注册静态方法 lua.DoString("StaticMethod()");
RegisterFunction,第一个参数表示注册成为Lua的方法名,第二个参数是c#的对象,第三个参数是这个对象的哪个方法(通过反射获取)
nil null
string System.String
number System.Double System.Int32...
boolean System.Boolean
table LuaInterface.LuaTable
function LuaInterface.LuaFunction
先引入两个dll文件,LuaInterface.dll和luanet.dll
using LuaInterface;
LuaInterface.Lua lua = new LuaInterface.Lua();//创建lua接口 lua.DoString("print('12345')");//调用string类型的lua代码 lua.DoFile("test.lua");//调用lua文件里面的lua代码 Console.WriteLine((string)lua["str"]);//访问lua中的变量 Console.ReadKey();
3.Lua文件类容
str = 'chiness' print("世界你好,中文的",str)
注意lua文件的编码,要设置为无BOM的,但是好像不支持中文
热更新就是可以动态的修改游戏的图片资源等,还有逻辑。通过AssetBundle和lua语言加c#语言结合,c#语言是一门预编译的语言,在手机平台下是实现不了动态编译的,除非用dll文件来通过反编译来实现,但是这个效率不高,所有使用可以用JIT动态编译运行的lua语言来带动c#等来实现热更新。