• lua环境搭建数据类型


    1.首先搭建lua的开发环境需要从github上下载lua的库,下载链接为 https://github.com/Tencent/xLua
    下载之后的压缩包xLua-master解压,解压后的assets文件夹才是我们需要的最终文件
    在这里插入图片描述2.将assets里面的文件内容拷贝到unity项目的assets目录中去,当我们看到如下菜单界面的时候就说明我们的环境已经配置ok了
    在这里插入图片描述3.各类文件路径配置
    环境配置上了我们配置专门管理lua脚本的文件夹LuaScripts以及C#脚本对应的文件夹Scripts,创建StreamingAssets保存本地的资源文件这个文件夹里面的资源会被打到包中去,创建editor文件夹用于编辑扩展代码 普通游戏代码不要放入这个文件夹里面。
    4.unity Lua代码编写
    在我们已经创建好的LuaScripts文件夹下面创建main.lua的lua文件代码如下

    main = {} -- main是一个全局模块;
    local function start()
    	print("game started") 
    end
    main.start = start
    return main
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.unity C#代码编写
    c#的处理主要有两块 一块是初始化lua的环境 另一块是调用lua文件的代码

     public class LuaLoader : MonoBehaviour
    {
        private LuaEnv luaEnv = null;
        void Start()
        {
            luaEnv = new LuaEnv();
            luaEnv.AddLoader(MyLuaLoader);
            LoadScript("main");
            SafeDoString("main.start()");//执行脚本
        }
    
        public static byte[] MyLuaLoader(ref string filePath)
        {
            string scriptPath = string.Empty;
            filePath = filePath.Replace(".", "/") + ".lua";
            scriptPath += Application.dataPath + "/LuaScripts/" + filePath;
            return GameUtility.SafeReadAllBytes(scriptPath);//通过文件IO读取lua内容
        }
        
        public void LoadScript(string scriptName)
        {
            SafeDoString(string.Format("require('{0}')", scriptName)); 
        }
    
        public void SafeDoString(string scriptContent)
        { // 执行脚本, scriptContent脚本代码的文本内容;
            if (this.luaEnv != null)
            {
                try
                {
                    luaEnv.DoString(scriptContent); // 执行我们的脚本代码;
                }
                catch (System.Exception ex)
                {
                    string msg = string.Format("xLua exception : {0}\n {1}", ex.Message, ex.StackTrace);
                    Debug.LogError(msg, null);
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    实现思路 创建luaEnv对象然后调用AddLoader添加lua的loader ,load脚本 然后调用脚本的方法。
    简单的实现思路如下
    下面用到的辅助类信息(简单的读取byte数据)

     public static byte[] SafeReadAllBytes(string inFile)
        {
            try
            {
                if (string.IsNullOrEmpty(inFile))
                {
                    return null;
                }
    
                if (!File.Exists(inFile))
                {
                    return null;
                }
    
                File.SetAttributes(inFile, FileAttributes.Normal);
                return File.ReadAllBytes(inFile);
            }
            catch (System.Exception ex)
            {
                Debug.LogError(string.Format("SafeReadAllBytes failed! path = {0} with err = {1}", inFile, ex.Message));
                return null;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    (免费领源码)hadoop#Mysql离线与实时的离线与实时的电影推荐系统10338-计算机毕业设计项目选题推荐
    uniapp拦截请求
    孟晚舟最新发声!华为吹响人工智能的号角,发布“全面智能化”战略部署
    耗时半天,我使用 Python 构建电影推荐系统
    驱动器类产品的接口EMC拓扑方案
    thinkphp5 redis使用
    PCLVisualizer显示点云的深层用法
    高仿英雄联盟游戏网页制作作业 英雄联盟LOL游戏HTML网页设计模板 简单学生网页设计 静态HTML CSS网站制作成品
    vue3+ts+java使用WebSocket传输数据
    bigemap在林业勘测规划设计行业的一些应用
  • 原文地址:https://blog.csdn.net/u011048906/article/details/132920272