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#等来实现热更新。