当前位置: 首页 > news >正文

xLua_001 Lua 文件加载

xLua下载

1、HelloWrold 代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;   // 引入XLua命名空间 

public class Helloworld01 : MonoBehaviour
{
    //声明LuaEnv对象  
    private LuaEnv luaenv;

    void Start()
    {
        //实例化LuaEnv对象
        luaenv = new LuaEnv();
        //执行lua代码 外面的双引号里面的是lua代码
        luaenv.DoString("print('Hello world')");
    }

    private void OnDestroy()
    {
        //释放LuaEnv对象
        luaenv.Dispose();
    }
}

输出结果:

2、环境管理规范

一个unity 项目最好只有一个 LuaEnv 实例

输出结果:

3、建立单独的Lua文件

单独的lua文件:
把lua程序放到resources文件夹里面,来加载这个程序,获取里面的字符串,把字符串当做一个参数放在C#文件中执行 

  • resources文件中

 引用脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;   // 引入XLua命名空间 

public class Helloworld02 : MonoBehaviour
{

    void Start()
    {   
                                     //文件名:helloworld.lua.txt
        TextAsset ta = Resources.Load<TextAsset>("helloworld.lua");     
        LuaEnv env = new LuaEnv();
        env.DoString(ta.text);   // env.DoString(ta.ToString());
        env.Dispose();
    }
}

输出结果:

4、使用系统内置加载Lua的方式

5、自定义加载器Loader

1) 加载一个不存在的lua文件(利用系统内置的加载方式,自定义Loader为空)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class Createloader : MonoBehaviour
{
    void Start()
    {
        LuaEnv env = new LuaEnv();

        env.AddLoader(MyLoader);

        env.DoString("require 'XXXXXX'");

        env.Dispose();    
    }

    private byte[] MyLoader(ref string filePath)
    {
        return null;
    }
   
}

输出结果:

2) 加载helloworld  lua文件(利用系统内置的加载方式,自定义Loader为空)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class Createloader : MonoBehaviour
{
    void Start()
    {
        LuaEnv env = new LuaEnv();

        env.AddLoader(MyLoader);

        env.DoString("require 'helloworld'");

        env.Dispose();    
    }

    private byte[] MyLoader(ref string filePath)
    {
        //输出文件名  helloworld
        print(filePath);
        //自定义loader为空
        return null;
    }
   
}

输出结果:

 输出顺序:自定义Loader ->>  系统内置的Loader

3) 加载  自定义Loader (首先执行自定义Loader程序   找到字节数组,执行自定义Loader,系统内置的Loader程序,不支执行)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class Createloader : MonoBehaviour
{
    void Start()
    {
        LuaEnv env = new LuaEnv();

        env.AddLoader(MyLoader);

        env.DoString("require 'helloworld'");

        env.Dispose();    
    }

    private byte[] MyLoader(ref string filePath)
    {
        print(filePath);
        string s = "print (123)";
        //字符串转为字节数组
        //通过System.Text.Encoding.UTF8转为字节数组  
        //通过GetBytes() 来获取数组
        return System.Text.Encoding.UTF8.GetBytes(s);

    }
   
}

输出结果:

6、通过 路径 加载Lua文件

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using XLua;

public class Createloader : MonoBehaviour
{
    void Start()
    {
        LuaEnv env = new LuaEnv();

        env.AddLoader(MyLoader);

        env.DoString("require 'test007'");

        env.Dispose();    
    }

    private byte[] MyLoader(ref string filePath)
    {
        print(filePath);
        //return System.Text.Encoding.UTF8.GetBytes(s);

        print(Application.streamingAssetsPath);
        //路径构建    拼接完整路径<Project>/Assets/StreamingAssets/test007.lua.text
        string absPath = Application.streamingAssetsPath + "/" + filePath + ".lua.text";
        //File.ReadAllText(absPath):文件读取(读取指定路径的文本文件内容)
        //字节转换
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));

    }
   
}

相关文章:

  • R语言基于ggscitable包复现一篇3.5分的文章的连续变量交互效应(交互作用)的可视化图
  • 记一次线上SQL死锁事故
  • 【一】Vue组件开发教程
  • Halcon算子 二维码识别、案例
  • AI 时代的通信新范式:MCP(模块化通信协议)的优势与应用
  • openvela新时代的国产开源RTOS系统
  • [网络安全] 滥用Azure内置Contributor角色横向移动至Azure VM
  • QA:备份产品的存储架构采用集中式和分布式的优劣?
  • 如何配置本地git
  • QT软件匠心开发,塑造卓越设计服务
  • 智慧港口新未来:大数据赋能应急消防,筑牢安全防线
  • 关于numpy里面的轴(axis)
  • w264民族婚纱预定系统
  • Python 爬虫(4)HTTP协议
  • 如何提高G口服务器的安全性?
  • 【技术简析】触觉智能RK3506 Linux星闪网关开发板:重新定义工业物联新标杆
  • 星越L_ 雨刷使用功能讲解
  • IDA调试时对异常的处理
  • Maven 简介及其核心概念
  • MySql中 一条select语句的执行流程
  • 基金经理调仓引发大金融板块拉升?公募新规落地究竟利好哪些板块
  • 时隔3年俄乌直接谈判今日有望重启:谁参加,谈什么
  • 6连败后再战萨巴伦卡,郑钦文期待打出更稳定发挥
  • 广东韶关一镇干部冲进交通事故火海救人,获授“见义勇为”奖励万元
  • 从这些电影与影像,看到包容开放的上海
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号