博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xlua04.使用C#调用lua脚本
阅读量:6676 次
发布时间:2019-06-25

本文共 2525 字,大约阅读时间需要 8 分钟。

01.导入插件

https://github.com/Tencent/xLua

02.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.Load
("LoadLuaThree.lua"); luaEnv.DoString(text.text); } private void OnDestroy() {
luaEnv.Dispose(); } }

在这里插入图片描述

04.用lua的require函数
比如:DoString(“require ‘byfile’”)
完整代码见XLua\Tutorial\LoadLuaScript\ByFile目录
require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。

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/

你可能感兴趣的文章
python练习2
查看>>
nodejs中的 Cannot read property'text' of undefined 问题
查看>>
python 函数的定义
查看>>
袁帅:用科技技术助力效益转化 剖析当前会议互动中的移动互联网科技
查看>>
关于机器级二进制位移
查看>>
windows7 10 windows2008 windws2012 nfs客户端的安装
查看>>
Spring Cloud--Honghu Cloud分布式微服务云系统—System系统管理
查看>>
MySQL数据库源码包安装(5.7最新版本)
查看>>
CentOS 7 yum安装zabbix 设置中文界面
查看>>
Django1.11启动错误:Generator expression must be parent
查看>>
SSH协议服务器、SUDO用法以及PAM机制
查看>>
CSS如何让li 4个一行显示
查看>>
杭州雄迈信息技术有限公司被评为“杭州市专利试点企业”
查看>>
ManageEngine网络管理软件新特点
查看>>
美团即时物流的分布式系统架构设计
查看>>
Win7获KB4493132更新
查看>>
锐龙R3 2200G和Intel i3-8100选哪个好
查看>>
HP ILO2 使用详细教程
查看>>
常用软介质下载
查看>>
Oracle教程之Oracle管理约束(一)--Oracle约束基本概念
查看>>