Unity3D游戏开发之Lua和游戏的不解之缘(下).docxVIP

Unity3D游戏开发之Lua和游戏的不解之缘(下).docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unity3D游戏开发之Lua和游戏的不解之缘(下)

Unity3D游戏开发之Lua与游戏的不解之缘(下)今天我们将视角转换到我们熟悉的Unity平台上来,那么我们为什么要将Lua语言引入Unity平台呢?这是我们今天要思考的第一个问题。传统的单机游戏通常以游戏光盘的形式出售给游戏玩家,玩家在购买游戏后无法获得更多的游戏内容,玩家只能在一张容量有限的游戏光盘里不断地重复寻找着游戏的乐趣。毋庸置疑,这种模式不利于游戏开发方为游戏增加新的内容。可是在互联网技术逐步成熟的今天,玩家在购买一款实体游戏后,通常可以通过购买DLC来体验更加丰富的游戏内容,而游戏制作方则可以通过DLC向玩家传达游戏正传中没有表达出来的内容。我们知道DLC是通常是指游戏的资料片,它是对游戏内容的一种补充。文章出处:狗刨学习网。从技术层面上来讲,如果我们采用编译型的语言来做一款游戏,那么我们根本无法实现对游戏内容的扩充,因为我们需要对整个项目进行重新编译然后打包成游戏光盘再出售给玩家。这样无疑会增加游戏制作方的制作成本,而更重要的是玩家不会为了新的游戏内容而再次购买游戏,显然这种方式是不合理的。那么,此时像Lua这样的脚本语言就可以发挥出巨大的作用,因为脚本语言通常不会占用太多资源,或许我们只需要一个游戏脚本就可以利用游戏中现有的场景和人物开辟出新的游戏剧情。所以,经过一番分析,大家可以总结出脚本语言在游戏开发中一个重要的作用就是更新。因为脚本语言通常都是纯文本文件,我们只需要改变某些参数而不必重新编译整个项目,这正是我们希望看到的。? ? ? ? ?第一步是下载UniLua,将UniLua引用到项目中有两种方法,一种是将该项目中的UniLua编译成dll然后在Unity项目中使用,一种是将该项目中的UniLua直接复制到Unity 项目中,我们这里使用第二种方法。将UniLua的命名空间添加到我们项目中,我们就可以开始动手写程序了。不过这里,博主想说的是Mono可能会导致的一个错误,.NET4.0以上的版本是支持默认参数的构造函数的。可是由于Mono默认使用的是.NET3.5,所以在编译项目的时候就会报错,我们可以通过Project-Assembly-CSharp-Build-General将.NET的目标框架设为4.0,这样就可以解决这个问题了。好了,下面我们开始写代码啦,首先创建一个InvokeScript.cs的脚本:using?UnityEngine;??using?System.Collections;??using?UniLua;????public?class?InvokeScript?:?MonoBehaviour?{????????????//Lua脚本文件,我们将在C#调用该脚本??????public?TextAsset?LuaFile;??????//Lua虚拟机??????private?ILuaState?mLua;????????void?Start()??????{??????????//初始化Lua虚拟机??????????mLua=LuaAPI.NewState();??????????//加载Lua标准库??????????mLua.L_OpenLibs();??????????//引用一个静态地C#库??????????mLua.L_RequireF(CSharpLib.CLASSNAME,CSharpLib.InitLib,false);?????????????//执行Lua脚本??????????mLua.L_DoString(LuaFile.text);??????}????????void?OnGUI()??????{??????????if(GUILayout.Button(调用Lua脚本,GUILayout.Height(30)))??????????{??????????????InvokeLua();??????????}??????????if(GUILayout.Button(调用C#脚本,GUILayout.Height(30)))??????????{??????????????InvokeCSharp();??????????}??????}???????#region?调用C#脚本??????void?InvokeCSharp()??????{??????????//获取方法并传入参数??????????mLua.GetGlobal(SumAndSub);??????????mLua.PushInteger(12);??????????mLua.PushInteger(8);??????????mLua.PCall(2,4,0);??????}??????#endregion???????????#region?调用Lua脚本??????vo

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档