本文共 2525 字,大约阅读时间需要 8 分钟。
01.导入插件
https://github.com/Tencent/xLua02.C#调用lua
最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua; //引入xluapublic class helllow : MonoBehaviour { LuaEnv luaenv; void Start () { luaenv = new LuaEnv(); //创建 xlua虚拟机 luaenv.DoString("print('6666')"); } private void OnDestroy() { luaenv.Dispose(); } }03.C#调用lua文件 创建LoadLuaThree.lua.txt,放入Resources文件夹 Resource加载的loader,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀(见附带的例子)。
Hero={ name,hp,mp,attack}function Hero:Attack1() print("攻击方法1")endfunction Hero.Attack2() print("攻击方法2")endfunction Hero:New() H={ }; MH={ __index=self} setmetatable(H,MH); return H;endNewPerson=Hero:New();NewPerson.name="好滴好滴";NewPerson.Attack2();NewPerson.Attack1();
创建C#脚本 LoadLua
using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;public class LoadLua : MonoBehaviour { LuaEnv luaEnv; void Start () { luaEnv=new LuaEnv(); TextAsset text=Resources.Load04.用lua的require函数 比如:DoString(“require ‘byfile’”) 完整代码见XLua\Tutorial\LoadLuaScript\ByFile目录 require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。("LoadLuaThree.lua"); luaEnv.DoString(text.text); } private void OnDestroy() { luaEnv.Dispose(); } }
using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;public class LoadLua : MonoBehaviour { LuaEnv luaEnv; void Start () { luaEnv=new LuaEnv(); luaEnv.DoString( "require'LoadLuaThree'"); } private void OnDestroy() { luaEnv.Dispose(); } }
使用xLua的自定义Loader加载lua脚本
public delegate byte[] CustomLoader(ref string filepath); public void LuaEnv.AddLoader(CustomLoader loader); 通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。该回调返回值是一个byte数组,如果为空表示该loader找不到,否则则为lua文件的内容。using System.Collections;using System.Collections.Generic;using UnityEngine;using System.IO;using XLua;public class Cunsterloader : MonoBehaviour { private LuaEnv luaEnv; void Start () { Debug.Log(Application.streamingAssetsPath); luaEnv=new LuaEnv(); luaEnv.AddLoader(CustomLoaders); luaEnv.DoString( "require'LoadLuaThree.lua.txt'"); } private byte[] CustomLoaders(ref string filepath){ string path=Application.streamingAssetsPath+"/"+filepath; return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path)); } private void OnDestroy() { luaEnv.Dispose(); }}
转载地址:http://bfrxo.baihongyu.com/