Unity3D游戏开发之Lua与游戏的不解之缘(下).docx
《Unity3D游戏开发之Lua与游戏的不解之缘(下).docx》由会员分享,可在线阅读,更多相关《Unity3D游戏开发之Lua与游戏的不解之缘(下).docx(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Unity3D游戏开发之Lua与游戏的不解之缘(下)今天我们将视角转换到我们熟悉的Unity平台上来,那么我们为什么要将Lua语言引入Unity平台呢?这是我们今天要思考的第一个问题。传统的单机游戏通常以游戏光盘的形式出售给游戏玩家,玩家在购买游戏后无法获得更多的游戏内容,玩家只能在一张容量有限的游戏光盘里不断地重复寻找着游戏的乐趣。毋庸置疑,这种模式不利于游戏开发方为游戏增加新的内容。可是在互联网技术逐步成熟的今天,玩家在购买一款实体游戏后,通常可以通过购买DLC来体验更加丰富的游戏内容,而游戏制作方则可以通过DLC向玩家传达游戏正传中没有表达出来的内容。我们知道DLC是通常是指游戏的资料片
2、,它是对游戏内容的一种补充。文章出处:狗刨学习网。从技术层面上来讲,如果我们采用编译型的语言来做一款游戏,那么我们根本无法实现对游戏内容的扩充,因为我们需要对整个项目进行重新编译然后打包成游戏光盘再出售给玩家。这样无疑会增加游戏制作方的制作成本,而更重要的是玩家不会为了新的游戏内容而再次购买游戏,显然这种方式是不合理的。那么,此时像Lua这样的脚本语言就可以发挥出巨大的作用,因为脚本语言通常不会占用太多资源,或许我们只需要一个游戏脚本就可以利用游戏中现有的场景和人物开辟出新的游戏剧情。所以,经过一番分析,大家可以总结出脚本语言在游戏开发中一个重要的作用就是更新。因为脚本语言通常都是纯文本文件,
3、我们只需要改变某些参数而不必重新编译整个项目,这正是我们希望看到的。 第一步是下载UniLua,将UniLua引用到项目中有两种方法,一种是将该项目中的UniLua编译成dll然后在Unity项目中使用,一种是将该项目中的UniLua直接复制到Unity 项目中,我们这里使用第二种方法。将UniLua的命名空间添加到我们项目中,我们就可以开始动手写程序了。不过这里,博主想说的是Mono可能会导致的一个错误,.NET4.0以上的版本是支持默认参数的构造函数的。可是由于Mono默认使用的是.NET3.5,所以在编译项目的时候就会报错,我们可以通过Project-Assembly-CSharp-Bu
4、ild-General将.NET的目标框架设为4.0,这样就可以解决这个问题了。好了,下面我们开始写代码啦,首先创建一个InvokeScript.cs的脚本:1. usingUnityEngine;2. usingSystem.Collections;3. usingUniLua;4. 5. publicclassInvokeScript:MonoBehaviour6. 7. /Lua脚本文件,我们将在C#调用该脚本8. publicTextAssetLuaFile;9. /Lua虚拟机10. privateILuaStatemLua;11. 12. voidStart()13. 14. /初
5、始化Lua虚拟机15. mLua=LuaAPI.NewState();16. /加载Lua标准库17. mLua.L_OpenLibs();18. /引用一个静态地C#库19. mLua.L_RequireF(CSharpLib.CLASSNAME,CSharpLib.InitLib,false);20. 21. /执行Lua脚本22. mLua.L_DoString(LuaFile.text);23. 24. 25. voidOnGUI()26. 27. if(GUILayout.Button(调用Lua脚本,GUILayout.Height(30)28. 29. InvokeLua();3
6、0. 31. if(GUILayout.Button(调用C#脚本,GUILayout.Height(30)32. 33. InvokeCSharp();34. 35. 36. 37. #region调用C#脚本38. voidInvokeCSharp()39. 40. /获取方法并传入参数41. mLua.GetGlobal(SumAndSub);42. mLua.PushInteger(12);43. mLua.PushInteger(8);44. mLua.PCall(2,4,0);45. 46. #endregion47. 48. #region调用Lua脚本49. voidInvok
7、eLua()50. 51. /获取Lua脚本中的arg1参数52. mLua.GetGlobal(arg1);53. /输出arg154. Debug.Log(Lua脚本中的变量arg1=+mLua.L_ToString(-1);55. 56. /获取Lua脚本中的arg2参数57. mLua.GetGlobal(arg2);58. /输出arg259. Debug.Log(Lua脚本中的变量arg2=+mLua.L_ToString(-1);60. 61. /获取Lua脚本中的Printf方法62. mLua.GetGlobal(Printf);63. /调用Lua脚本中的Printf方法6
8、4. mLua.PCall(0,0,0);65. 66. /获取Lua脚本中的Sum方法67. mLua.GetGlobal(Sum);68. /传入参数12和2569. mLua.PushInteger(12);70. mLua.PushInteger(25);71. /调用此方法72. mLua.PCall(2,3,0);73. /获取传入的两个参数及求和结果74. inta=mLua.ToInteger(-3);75. intb=mLua.ToInteger(-2);76. intsum=mLua.ToInteger(-1);77. /输出78. Debug.Log(调用Lua脚本中的S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Unity3D 游戏 开发 Lua 不解之缘
限制150内