在Unity3d中解析Lua脚本的方法

由于近期项目中提出了热更新的需求,因此本周末在Lua的陪伴下度过。对Lua与Unity3d的搭配使用,仅仅达到了一个初窥门径的程度,记录一二于此。水平有限,欢迎批评指正。

网络上关于Lua脚本和Unity3d的配合使用的资料不多,例子工程大多相同。大概了解到针对性的插件有uLua、UniLua、KopiLua三种。试用了前两种,抛开效率与安全性不说,感觉uLua试用起来比较简单,本文只介绍uLua的使用步骤。

uLua的原理是在Unity3d中解析字符串形式的Lua脚本,让Lua与C#相互传递参数和方法,这样可以以文本的形式记录Lua脚本,游戏启动后就能够动态地让一部分外部逻辑在游戏中运行起来。

如果在外部的Lua脚本中记录了加载资源的内容,那么就可以通过更新这个记录有Lua脚本的文档来加载不同的资源,实现游戏的热更新。

(当然,Lua脚本的使用的多少,使用在哪些部分,感觉值得为每款游戏量身思考,比如担心效率不高,可能就不适合使用在要求运行速度的部分;一旦Lua脚本中出现了报错,他只会报在C#中解析他的地方,因此查错的难易程度可能也是个问题)

1】下载到ulua的资源包,导入工程中,按照说明,将其中的Plugins文件夹中的内容整体复制到工程的Plugins文件夹中;

(这一步可能会出现找不到dll的错误,我这里是重启Unity解决的)

导入后工程的根目录有以下这些东西:

2】在.txt文件中编写一些Lua脚本,比如:

(注意:此处.txt脚本的后缀名是".txt")

3】将这个存有Lua脚本的.txt文件加载到游戏中,资源类型是"TextAsset":

方法任选,比如:

①放到Resources文件夹中,Resources.Load()来加载;

②放到工程中任意地方,使用Resoueces.LoadAtPath()来加载;

③打成AssetBundle,放到文件服务器上,使用WWW来异步加载。

如果使用③的话,推荐一个名字叫做"HFS"的虚拟文件服务器的小工具很方便,只需点一下,即可模拟一个文件服务器出来:

,非常好用)

4】解析Lua脚本:

1 LuaState ls = new LuaState();
2 ls.DoString(luaString);              //luaString是加载进来的文档中的字符,类型是string
3 LuaFunction lf = ls.GetFunction("luaFunc");  //luaFunc是Lua脚本中编写的方法名
4 object[] r = lf.Call("2");            //括号中的"2"是要传递到Lua中的方法中的参与整型运算的值
5 return r[0].ToString();              //r[0]即是运算后返回的值,类型是object,用之前,需要转一下类型

非常简单,综上,Lua与Unity3d中的C#的联系,互相传递方法和参数,就OK了。你会看到,真的有外部的逻辑在正在运行的游戏中起作用了。

在Unity3d中解析Lua脚本的方法,布布扣,bubuko.com

时间: 2024-12-20 01:16:49

在Unity3d中解析Lua脚本的方法的相关文章

nginx使用lua脚本的方法

nginx中使用lua脚本的方法,本文介绍通过第三方模块lua-nginx-module实现lua脚本在nginx的调用,并附一个配置例子 Lua是一种跟JavaScript很像的语言,Ngix_Lua同样使用异步单线程,语法甚至比JS更加简单,之前的评测指出,Ngix_lua的性能几乎是Node.JS的一倍. Nginx 特点 1.流行的高性能HTTP服务器2.事件驱动(异步)架构3.少量且可测内存占用4.声明性配置语言5.基于C的可扩展模块 通过lua-nginx-module即可在ngin

【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-16 10:08 30803人阅读 评论(18) 收藏 举报 游戏脚本luaanimationpython 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/681.htm

在html中添加script脚本的方法和注意事项

在html中添加script脚本有两种方法,直接将javascript代码添加到html中与添加外部js文件,这两种方法都比较常用,大家可以根据自己需要自由选择 在html中添加<script>脚本的方法: 1.可以直接将javascript代码添加到html中 <script type="text/javascript"> //javascritp代码 </script> 当解释器嵌入<script>代码时,html页面的处理也会被暂时

在redis中使用lua脚本

在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能. 不过lua也会有很多限制,在使用的时候要注意. 在Redis中执行Lua脚本有两种方法:eval和evalsha eval EVAL script numkeys key [key ...] arg [arg ...] 其中: <1> script:你的lua脚本 <2> numkeys:  key的个数 <3> key:redis中各种数据

InstallShield在MySQL和Oracle中执行SQL脚本的方法InstallShield在MySQL和Oracle中执行SQL脚本的方法

简述 InstallShield已经内建了对MySQL和Oracle的支持.但是这个功能是通过ODBC实现的,它对SQL脚本的格式要求非常严格,因此已经通过官方客户端测试的脚本在IS中执行时往往就会报错. 一般来说,数据库脚本只保证通过官方客户端测试即可,同时维护一份供IS执行的脚本费时费力.因此,考虑安装程序对两数据库的支持通过官方客户端实现. MySQL   function InstallMySQLComponent(szComponent) NUMBER nResult; STRING

PowerShell因为在此系统中禁止执行脚本解决方法

PowerShell因为在此系统中禁止执行脚本解决方法 在Powershell直接脚本时会出现: 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing". 所在位置 行:1 字符: 17 + E:\Test\test.ps1 <<<<     + CategoryInfo          : NotSpecified: (:) [], PSSecurityException    

C++中嵌入Lua脚本环境搭建

第一步(环境准备工作): 工具: ●LuaForWindows_v5.1.4-46.exe傻瓜式安装. 作用:此工具可以在windows环境下编译运行Lua脚本程序.安装完成后会有两个图标:Lua和SciTE.Lua是命令行,SciTE是图形运行环境,两个都可以编译运行,看个人喜好. ●VS2012大家都会,此处省略若干字... 第二步(在VS2012下新建并运行C++中嵌入Lua脚本程序): ●打开VS2012,新建一个控制台的C++空项目 ●配置Lua的安装路径和引用相关Lua库 1.右击新

shell中引用其他脚本的方法

在Shell中引用其他脚本的方法是source   filename.sh 或    .    filename.sh 注意:      .   和   filename.sh之间必须有空格

Java中使用Lua脚本语言(转)

Lua是一个实用的脚本语言,相对于Python来说,比较小巧,但它功能并不逊色,特别是在游戏开发中非常实用(WoW采用的就是Lua作为脚本的).Lua在C\C++的实现我就不多说了,网上随便一搜,到处都是这方面的介绍,我想说的是如何在Java下使用Lua以提高编程效率.增强你的程序可扩展性. 首先,要在Java上使用Lua脚本,必须有关于Lua脚本解释器以及Java程序可以访问这些脚本的相关API,即相关类库.我使用的是一个叫做LuaJava的开源项目,可以在: http://www.keple