在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脚本:
- LuaState ls = new LuaState();
- ls.DoString(luaString); //luaString是加载进来的文档中的字符,类型是string
- LuaFunction lf = ls.GetFunction("luaFunc"); //luaFunc是Lua脚本中编写的方法名
- object[] r = lf.Call(""); //括号中的"2"是要传递到Lua中的方法中的参与整型运算的值
- return r[].ToString(); //r[0]即是运算后返回的值,类型是object,用之前,需要转一下类型
非常简单,综上,Lua与Unity3d中的C#的联系,互相传递方法和参数,就OK了。你会看到,真的有外部的逻辑在正在运行的游戏中起作用了。
在Unity3d中解析Lua脚本的方法的更多相关文章
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...
- 在html中添加script脚本的方法和注意事项
在html中添加script脚本有两种方法,直接将javascript代码添加到html中与添加外部js文件,这两种方法都比较常用,大家可以根据自己需要自由选择 在html中添加<script& ...
- 在redis中使用lua脚本
在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能. 不过lua也会有很多限制,在使用的时候要注意. 在Redis中执行Lu ...
- 新姿势!Redis中调用Lua脚本以实现原子性操作
背景:有一服务提供者Leader,有多个消息订阅者Workers.Leader是一个排队程序,维护了一个用户队列,当某个资源空闲下来并被分配至队列中的用户时,Leader会向订阅者推送消息(消息带有唯 ...
- C++中嵌入Lua脚本环境搭建
第一步(环境准备工作): 工具: ●LuaForWindows_v5.1.4-46.exe傻瓜式安装. 作用:此工具可以在windows环境下编译运行Lua脚本程序.安装完成后会有两个图标:Lua和S ...
- shell中引用其他脚本的方法
在Shell中引用其他脚本的方法是source filename.sh 或 . filename.sh 注意: . 和 filename.sh之间必须有空格
- PowerShell因为在此系统中禁止执行脚本解决方法
PowerShell因为在此系统中禁止执行脚本解决方法 在Powershell直接脚本时会出现: 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 " ...
- redis中使用lua脚本
lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...
- Unity3D中C#和JS的方法互相調用
因为Unity3D中一些腳本的方法仅仅能用在JS中.在C#中是無效的,而C#能够與服務器端通訊,JS本身卻不行.所以勢必會遇到這兩種語言腳本中方法的互相調用,下面是演示样例. 兩個文件 test1.j ...
随机推荐
- 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心
题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi,地面的高度是 h_0 = 0 ...
- poj2492A Bug's Life——带权并查集
题目:http://poj.org/problem?id=2492 所有元素加入同一个并查集中,通过其偏移量%2将其分类为同性与异性,据此判断事件. 代码如下: #include<iostrea ...
- Redux API之applyMiddleware
applyMiddleware(...middlewares) 使用包含自定义功能的 middleware 来扩展 Redux 是一种推荐的方式.Middleware 可以让你包装 store 的di ...
- win+apache网站打开很慢的解决笔记
为了图方便,直接把wamp的vhost配置文件复制到新apache2.2.25上,结果打开静态页速度都非常慢. <VirtualHost *:> ServerAdmin www.fuck2 ...
- codeblocks 汉字乱码
网上有很多方法,不过目测是不同的机子和环境要用不同的设置来应对这种情况 电脑情况: win8 64-bit 装的是codeblocks v12.11 然后在我电脑上正确的配置是setting-edit ...
- 3.12-3.16 Hbase集成hive、sqoop、hue
一.Hbase集成hive https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration 1.说明 Hive与HBase整合在一起 ...
- SharePoint 2010 将带有工作流的模板移动到另一个站点集
HOWTO Move or Migrate SharePoint 2010 List-based Workflows between Sites and Site Collections I’ve e ...
- Unity中场景异步加载
引入命名空间 using UnityEngine.UI; using UnityEngine.SceneManagement; using System.Collections; using Syst ...
- CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目
原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...
- c#实现最简快速排序,你绝对可以看懂
原创文章,转载请注明出处 算法对于程序员的重要性不言而喻,今天我和大家分享算法中的一个基础算法,快速排序.作为一名程序员,相信大家都不陌生,但是要大家徒手一次性写出来,我估计还是有难度的.那么废话不多 ...