XLua笔记-将lua项目和unity工程放到VS中
来源:互联网 发布:windows sever 2003 编辑:程序博客网 时间:2024/06/06 06:40
今天 又来玩了下xlua,在VS2015的环境下,加入了lua工程,这样就可以和untiy的脚本放在同一个VS编辑器中了,如下图这样
首先是vs2015将在Extensions And Updatas下安装BabeLua,安装好了 可能要重新启动,然后就可以在同一个Solution 下新建lua工程了
接下来就是如何在unity下加载lua文件了,xlua是有customLoader的。这里可详见官方的文档啦 (我也是初学者)
根据提示 我写了这个东西
luaEnv.AddLoader((ref string filename) => { string myStr = ""; using (FileStream fsRead = new FileStream(@"..\LuaProject\LuaScript\"+filename+".lua", FileMode.Open)) { int fsLen = (int)fsRead.Length; byte[] heByte = new byte[fsLen]; int r = fsRead.Read(heByte, 0, heByte.Length); myStr = System.Text.Encoding.UTF8.GetString(heByte); } return System.Text.Encoding.UTF8.GetBytes(myStr); return null; });
上面这个代码是 xlua的require机制 ,如果lua脚本中有require就会应用到这个加载器,也就是
luaEnv.DoString(“require(‘Main’));
这句代码 会去 @”..\LuaProject\LuaScript\”+filename+”.lua” 拼这个字符串 找到加载路径的,当然在lua脚本的require也是这个路径
这样一来很方便了 再次膜拜下xlua
再讲下 这个东西LuaBhaviar.cs (下面我是改的官方的)
//******************************************************************// File Name: $safeitemname$.cs// Description: $safeitemname$ class // Author: lanjian// Date: $time$// Reference:// Using:// Revision History://******************************************************************using UnityEngine;using System.Collections;using System;using XLua;using System.IO;public class LuaBhaviar : MonoBehaviour { internal static LuaEnv luaEnv = new LuaEnv(); //all lua behaviour shared one luaenv only! private Action luaStart; private Action luaUpdate; private Action luaOnDestroy; private LuaTable scriptEnv; // Use this for initialization void Awake() { scriptEnv = luaEnv.NewTable(); LuaTable meta = luaEnv.NewTable(); meta.Set("__index", luaEnv.Global); scriptEnv.SetMetaTable(meta); meta.Dispose(); luaEnv.AddLoader((ref string filename) => { string myStr = ""; using (FileStream fsRead = new FileStream(@"..\LuaProject\LuaScript\"+filename+".lua", FileMode.Open)) { int fsLen = (int)fsRead.Length; byte[] heByte = new byte[fsLen]; int r = fsRead.Read(heByte, 0, heByte.Length); myStr = System.Text.Encoding.UTF8.GetString(heByte); } return System.Text.Encoding.UTF8.GetBytes(myStr); return null; }); luaEnv.DoString("require('Main')","LuaBhaviar", scriptEnv); Action luaAwake = scriptEnv.Get<Action>("awake"); scriptEnv.Get("start", out luaStart); scriptEnv.Get("update", out luaUpdate); scriptEnv.Get("onDestroy", out luaOnDestroy); if (luaAwake != null) { luaAwake(); } } void Start() { if (luaStart != null) { luaStart(); } } // Update is called once per frame void Update () { if (luaUpdate != null) { luaUpdate(); } } void OnDestroy() { if (luaOnDestroy != null) { luaOnDestroy(); } luaOnDestroy = null; luaUpdate = null; luaStart = null; scriptEnv.Dispose(); }}
然后在贴下main.lua和LuaTest.lua 再解释
-- region *.lua-- Date-- 此文件由[BabeLua]插件自动生成local LuaTest = require 'LuaTest1'LuaTest.lua("打印")function awake() local gameObject = CS.UnityEngine.GameObject.Find("Image"):GetComponent("Image").sprite gameObject.name = "XX1001" local newGameObj = CS.UnityEngine.GameObject() print(gameObject.name)endfunction start() print("lua start...")endfunction update()endfunction onDestroy() print("lua destroy")end-- endregion
这里写代码片--region *.lua--Date--此文件由[BabeLua]插件自动生成LuaTest = {}LuaTest.lua = function (args) print(args)endLuaTest.GetSomething = function (args) print("GetSomething")endreturn LuaTest--endregion
1,LuaBhaviar.cs是根据官方的Examples的LuaBehaviour.cs
主要作用就是连接lua和unity的,这样一来 main.lua也就有了想c#脚本一样的生命周期了,详细见代码
注:有时候重新打开VS发现先前创建的lua工程见了,那可能就需要重新加载进来,lua文件不见了 也需要重新加载进来,这里 可能这样lua文件的位置在实际是不正确的,不过在开发中,这样是没问题的吧(这个我也不肯定,但是这样lua就不用以txt结尾了,到了打包时,改下路径,然后整体移动到Resource或者其他文件夹中吧)
- XLua笔记-将lua项目和unity工程放到VS中
- Unity中SLua、Tolua、XLua和ILRuntime效率评测
- iOS如何将外部数据库放到xcode工程中使用
- 将MVC中的Controllers、Model和View分别放到单独的项目中
- vs项目中使用c++调用lua
- 在VS中测试Lua项目
- 【Unity】中GC优化XLua下的各种值类型
- 【现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua
- ubuntu 11.10 将unity laucher 放到底部
- 将代码view和xibview放到SB中
- VC 6.0和VS中工程和项目的属性配置
- 关于在VS中调试Unity项目的解决过程和遗留问题
- xLua的学习笔记
- 将项目放到服务器tomcat上运行
- Lua和Unity交互
- [Unity XLua]热更新XLua入门(一)-基础篇
- [Unity XLua]热更新XLua入门(二)-俄罗斯方块实例篇
- 将maven项目打成jar包放到本地mvn库中 并指定用mahout编译
- MVP详细解析以及使用方法
- he android gradle plugin version 2.4.0-alpha7 is too old, please update to the latest version.
- 删除maven仓库中的LastUpdated文件
- JDK1.7后的字符串比较
- delphi 数组复制利用CopyMemory 最为完美
- XLua笔记-将lua项目和unity工程放到VS中
- 【Qt 编译】QT 工程文件
- postgresql+pgrouting 最短路线sql (4)
- 频道
- Git忽略规则及.gitignore规则不生效的解决办法
- C# 判断用户是手机访问还是电脑访问
- 测试Shutdown
- jQuery选择器
- CopyFile