XLua笔记-将lua项目和unity工程放到VS中

2023-12-20 01:58

本文主要是介绍XLua笔记-将lua项目和unity工程放到VS中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天 又来玩了下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 initializationvoid 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 framevoid 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").spritegameObject.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中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514443

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook