Unity3D游戏开发之Lua与游戏的不解之缘(上).docx_第1页
Unity3D游戏开发之Lua与游戏的不解之缘(上).docx_第2页
Unity3D游戏开发之Lua与游戏的不解之缘(上).docx_第3页
Unity3D游戏开发之Lua与游戏的不解之缘(上).docx_第4页
Unity3D游戏开发之Lua与游戏的不解之缘(上).docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Unity3D游戏开发之Lua与游戏的不解之缘(上)一、什么是Lua? Lua是一个小巧的脚本语言,巴西里约热内卢天主教大学里的一个研究小组于1993年开发,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。相比Python和Per的内核,Lua的内核小于120KB,而Python的内核大约860KB,Perl的内核大约1.1MB。Lua语言支持面向对象编程和函数式编程,它提供了一个通用类型的表table,可以实现数组、哈希表、集合、对象的功能。Lua支持协同进程机制。【狗刨学习网】作为一门可扩展的语言,Lua提供简单而稳定的交互接口,如Lua和C程序可通过一个堆栈交换数据,这使得Lua语言可以快速地和其它语言实现整合。总体来说,Lua语言具备以下优点:(1)语言优美、轻巧(2)性能优良、速度快 (3)可扩展性强。正因为Lua语言具备了这样的特点,使得它能和游戏开发领域的需求完美地结合起来,因为我们需要这样的一门语言,它能够和C/C+进行完美地交互,因为我们需要它对底层进行封装。它需要足够地简单,因为我们需要简单、灵活、快速地编写代码。那么显然Lua就是我们一直在寻找地这种语言。 二、Lua可以做什么? 尽管博主已经告诉了大家太多的关于Lua语言的优秀特性,相信大家仍然会对Lua语言的能力存在怀疑。大家或许会想,Lua到底可以做什么呢?在Lua游戏开发一书中作者已经告诉了我们答案: 1、编辑游戏的用户界面 2、定义、存储和管理基础游戏数据 3、管理实时游戏事件 4、创建和维护开发者友好的游戏存储和载入系统 5、编写游戏的人工智能系统 6、创建功能原型,可以之后用高性能语言移植 这时候我们似乎觉得Lua语言在某种程度上就是专门为游戏开发而诞生的,因为它将大量的优秀特性全部指向了游戏开发领域,因此Lua语言走进走进游戏开发领域变得顺利成章,那么,让我们接着往下看吧,Lua在游戏开发领域有那些成熟的案例吧。【狗刨学习网】 三、哪些游戏使用了Lua? 1、魔兽世界 如果提到Lua在游戏领域中第一次崭露头角,我们就不能不说魔兽世界这款游戏,由于魔兽世界在其客户端中使用了Lua,使得Lua在游戏领域的作用第一次被展示出来,Lua语言因此在游戏开发领域成名。Lua语言的虚拟机很轻巧,可以很容易地嵌入到客户端程序中。【狗刨学习网】如果需要更新客户端,只需要更新脚本程序即可,无需重新编译整个客户端。这样地优点使得Lua在游戏开发领域一战成名,可以说是魔兽世界为游戏开发领域带来了这样激动人心的伟大语言,作为Lua在游戏领域攻城略地的尝试,魔兽世界功不可没。 2、大话西游2 如果说魔兽世界开辟Lua在国外游戏领域地战场,那么网易的大话西游2无疑是开启了国内游戏制作公司使用Lua的先河。2002年网易开发大话西游2时,决定在客户端内嵌入新的脚本语言,因为当时使用的微软JScript存在较多Bug、维护不便、兼容性差。当时该项目技术负责人云风吸取了大话西游1时外挂泛滥的教训,决定选择一个新的语言,这样既能摆脱对JScript的依赖,又能有效地打击外挂制作者,权衡再三,最终选择了Lua 4.0。后来大话西游2在市场上取得了成功,国内游戏开发行业纷纷受此影响采用Lua,可以说是网易Lua走进了国内开发者的视野,不过到今天为止,Lua在国内仍然是一门较为小众的语言,从大话西游2引领国内开发者将视角转向Lua到今天将近10余年地时间,此中缘由,只有大家自己去想个清楚啦。 3、古剑奇谭 古剑奇谭系列游戏是由上海烛龙信息科技有限公司研发的大型3DRPG单机游戏。游戏设定源自于山海经,故事则以武侠和仙侠为创作题材,以中国神话时代为背景,讲述了中国古代侠骨柔情的仙侠文化。古剑奇谭系列游戏初代作品与二代作品采用的是不同的游戏引擎和不同的战斗模式,尽管如此,我们依然能从中找到一个共同点,那就是在初代作品和二代作品中都毫无例外的使Lua作为游戏地脚本语言。例如下面是古剑奇谭红叶湖迷宫场景的Lua脚本节选:1. require(Necessary)2. require(StoryUtility)3. require(BigMap)4. require(Script_DLC4)5. 6. -以下为初始化函数-7. 8. functionOnEnterLevel()9. ifGetStoryVersion()=2then10. OnDLCEnterLevelM01()11. else12. ifGetMainStory()=10100then13. callTaskFunction(story10100)14. elseifGetMainStory()=161900then15. callTaskFunction(story161900)16. end17. 18. ifgValue.MK=1then19. showNPC(NPC06,false)20. showNPC(NPC07,false)21. enableTrigger(Tri_MK,false)22. elseifgValue.MK1then23. showNPC(NPC04,false)24. showNPC(NPC05,false)25. showNPC(NPC06,false)26. showNPC(NPC07,false)27. enableTrigger(Tri_MK,false)28. enableTrigger(Tri_MK02,false)29. end 4、仙剑奇侠传 既然提到了古剑奇谭,怎么能不提仙剑奇侠传呢?虽然和古剑奇谭初代作品发布时间仅仅相差一年的仙剑奇侠传五市场反响并没有像游戏制作方所预料地那样成功,不过这部作品值得称赞地地方还是蛮多的,因为进步总是要比缺点多的嘛,毕竟时代在进步,我们不能总是拿仙剑初代作品的高度去要求后续作品,因为我们已经不再是那个年龄的人,而仙剑依然要不断地突破自身、大胆创新和进取。【狗刨学习网】好了,我们暂时先感慨到这里,仙剑四、仙剑五以及仙剑五前传都使用了RenderWare引擎,可能唯一的不同就是仙剑五和仙剑五前传都使用了Lua吧,下面同样是一段从游戏中提取的脚本:1. functionbaoxiang(id,npcID)2. 3. player.Control(0)4. pid=player.GetMainPlayer()5. player.SetAnim(pid,203)6. global.Print(id)7. global.Wait(1)8. y=flag.GetValue(15093)9. 10. -江洋大盗称号获得-11. jyd=flag.GetValue(15255)12. jyd=jyd+113. flag.SetValue(15255,jyd)14. global.Print(jyd)15. global.AddTimer(0.5,13279)16. -17. 18. ifid=17711then19. npc.SetAnim(npcID,501)20. global.Wait(1)21. end 5、金庸群侠传Lua复刻版四、带你走进Lua的世界 最后想和大家分享是Lua语言编程的一个简单的示例,因为博主觉得以后做游戏用脚本语言的场景会越来越多,所以能学会一门脚本语言能为你的游戏开发之路增色不少。因为博主刚开始学,所以脚本中有不足之处,希望大家能谅解,在学校的时间一天天地在减少,博主希望能和大家共同度过最后的这段时间。博主使用的是Lua5.2,使用的Sublime Text2作为脚本编辑器配合LuaDev插件进行编程的,如果大家想用懒惰点的办法,可以使用Lua for Windows这个集成环境。好了,下面开始吧,作为第一个Lua程序,我们直接给出代码,具体的语法及API大家可以自己去查阅。1. -while-do示例代码2. myValue=103. while(myValue=20)do4. print(myValue)5. myValue=myValue+16. end7. -sampletable&for-do示例代码8. myTables=Item0,Item1,Item2,Item39. fori=1,table.maxn(myTables)do10. print(myTablesi)11. end12. -complextable示例代码13. myTables=14. myTablesA=ItemA15. myTablesB=ItemA16. myTablesC=ItemA17. myTablesD=ItemA18. print(myTablesA)-ItemA19. -function示例代码20. functionfib(n)21. if(n2)then22. returnn23. else24. returnfib(n-1)+fib(n-2)25. end26. end27. -math示例代码28. maxValue=math.max(12,23,56,18,10)-5629. minValue=math.min(25,34,12,75,8)-830. print(maxValue-minValue)-4831. -字符串演示32. myString=Hellothisisthecool

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论