读一读

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


  1. 先引入两个dll文件,LuaInterface.dll和luanet.dll

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