[Unity3D]Unity3D游戏开发Lua随着游戏的债券(在)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培。 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39826323
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客。我地博客地址是blog.csdn.net/qinyuanpei。
假设提到游戏开发,大家一定会想到C/C++、DirectX、OpenGL等这些东西。但是众所周知,游戏行业是一个需求变化极快地行业,假设我们採用编译型的语言,那么我们可能非常难跟上这个时代的步伐,由于编译型的语言每经历一次重大地更新,整个项目都须要又一次编译,这样无疑会影响我们的开发效率。
那么,有没有一种更为高效的游戏开发模式呢?也许答案大家已经看到了。如今在游戏界普遍採用的方式是将游戏的底层逻辑交给C/C++这种底层语言,而将游戏的上层逻辑交给脚本语言。
由于底层逻辑更看重效率而上层逻辑更注重灵活、便捷地使用。比如我们熟知的Unreal引擎是採用UnrealScripts,这是一种相似于Java/C语法地语言。Unity3D引擎是採用的C#/javaScript/Boo这三种脚本语言;cocos2d-x採用地是Lua/javaScript这两种脚本语言,未来可能会支持很多其他的语言。大家可能想问一个问题:什么是脚本语言?所谓脚本语言是一种用来控制软件应用程序且仅仅在被调用时进行解释或编译的编程语言,这种语言通常以文本的形式来存储脚本代码。换句话说。脚本语言相似于一种指令,它缩短了传统应用程序的编写-编译-链接-执行(edit-compile-link-run)这个过程,是一种解释执行的程序。
也许人们发明脚本语言的那一刻起,从未想过要将脚本语言和游戏开发联系在一起,只是脚本语言注定会由于游戏开发而开拓出更为广阔的世界。本文将以眼下游戏开发领域较为流行的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在游戏领域中第一次崭露头角,我们就不能不说《魔兽世界》这款游戏。由于《魔兽世界》在其client中使用了Lua。使得Lua在游戏领域的作用第一次被展示出来。Lua语言因此在游戏开发领域成名。Lua语言的虚拟机非常轻巧,能够非常easy地嵌入到client程序中。假设须要更新client,仅仅须要更新脚本程序就可以。无需又一次编译整个client。
这样地长处使得Lua在游戏开发领域一战成名。能够说是《魔兽世界》为游戏开发领域带来了这样激动人心的伟大语言,作为Lua在游戏领域攻城略地的尝试,《魔兽世界》功不可没。
2、大话西游2
假设说《魔兽世界》开辟Lua在国外游戏领域地战场,那么网易的《大话西游2》无疑是开启了国内游戏制作公司使用Lua的先河。2002年网易开发《大话西游2》时,决定在client内嵌入新的脚本语言。由于当时使用的微软JScript存在较多Bug、维护不便、兼容性差。当时该项目技术负责人云风吸取了《大话西游1》时外挂泛滥的教训,决定选择一个新的语言。这样既能摆脱对JScript的依赖,又能有效地打击外挂制作者,权衡再三。终于选择了Lua 4.0。后来《大话西游2》在市场上取得了成功,国内游戏开发行业纷纷受此影响採用Lua,能够说是网易Lua走进了国内开发人员的视野。只是到今天为止。Lua在国内仍然是一门较为小众的语言。从《大话西游2》引领国内开发人员将视角转向Lua到今天将近10余年地时间。此中缘由。仅仅有大家自己去想个清楚啦。
3、古剑奇谭
《古剑奇谭》系列游戏是由上海烛龙信息科技有限公司研发的大型3DRPG单机游戏。
游戏设定源自于《山海经》,故事则以武侠和仙侠为创作题材,以中国神话时代为背景,讲述了中国古代侠骨柔情的仙侠文化。《古剑奇谭》系列游戏初代作品与二代作品採用的是不同的游戏引擎和不同的战斗模式,虽然如此,我们依旧能从中找到一个共同点。那就是在初代作品和二代作品中都毫无例外的使Lua作为游戏地脚本语言。
比如以下是《古剑奇谭》红叶湖迷宫场景的Lua脚本节选:
require("Necessary")
require("StoryUtility")
require("BigMap")
require("Script_DLC4") --------------以下为初始化函数------------- function OnEnterLevel()
if GetStoryVersion() == 2 then
OnDLCEnterLevelM01()
else
if GetMainStory() == 10100 then
callTaskFunction("story10100")
elseif GetMainStory() == 161900 then
callTaskFunction("story161900")
end if gValue.MK == 1 then
showNPC("NPC 06", false)
showNPC("NPC 07", false)
enableTrigger("Tri_MK",false)
elseif gValue.MK >1 then
showNPC("NPC 04", false)
showNPC("NPC 05", false)
showNPC("NPC 06", false)
showNPC("NPC 07", false)
enableTrigger("Tri_MK",false)
enableTrigger("Tri_MK 02",false)
end
4、仙剑奇侠传
既然提到了古剑奇谭,怎么能不提仙剑奇侠传呢?虽然和古剑奇谭初代作品公布时间仅仅相差一年的《仙剑奇侠传五》市场反响并没有像游戏制作方所预料地那样成功,只是这部作品值得称赞地地方还是蛮多的,由于进步总是要比缺点多的嘛,毕竟时代在进步。我们不能总是拿仙剑初代作品的高度去要求兴许作品。由于我们已经不再是那个年龄的人。而仙剑依旧要不断地突破自身、大胆创新和进取。好了,我们临时先感慨到这里,仙剑四、仙剑五以及仙剑五前传都使用了RenderWare引擎。可能唯一的不同就是仙剑五和仙剑五前传都使用了Lua吧,以下相同是一段从游戏中提取的脚本:
function baoxiang(id,npcID) player.Control(0)
pid=player.GetMainPlayer()
player.SetAnim(pid,203)
global.Print(id)
global.Wait(1)
y=flag.GetValue(15093) ---------江洋大盗称号获得-------------
jyd=flag.GetValue(15255)
jyd=jyd+1
flag.SetValue(15255,jyd)
global.Print(jyd)
global.AddTimer(0.5,13279)
----------------------------------------- if id~=17711 then
npc.SetAnim(npcID,501)
global.Wait(1)
end
5、金庸群侠传Lua复刻版
四、带你走进Lua的世界
--while-do演示样例代码
myValue=10
while(myValue <= 20) do
print(myValue)
myValue=myValue+1
end
--sample table && for-do演示样例代码
myTables={"Item0","Item1","Item2","Item3"}
for i=1,table.maxn(myTables) do
print(myTables[i])
end
--complex table演示样例代码
myTables={}
myTables["A"]="ItemA"
myTables["B"]="ItemA"
myTables["C"]="ItemA"
myTables["D"]="ItemA"
print(myTables["A"])--"ItemA"
--function演示样例代码
function fib(n)
if(n<2) then
return n
else
return fib(n-1)+fib(n-2)
end
end
--math演示样例代码
maxValue=math.max(12,23,56,18,10)--56
minValue=math.min(25,34,12,75,8)--8
print(maxValue-minValue)--48
--字符串演示
myString="Hello this is the cool program language called Lua";
print(string.find(myString,"Lua"))--48,50
--io演示
io.write("Hello I get a powerful program language called Lua \n")
io.write(string.format("This Lua is %s and now is %s \n",_VERSION,os.date()))
执行结果是:
每日箴言:趁年轻。走自己想走的路。没理由,不去闯。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWlueXVhbnBlaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39826323
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
版权声明:本文博主原创文章,博客,未经同意不得转载。转载请注明作者和出处,谢谢!
[Unity3D]Unity3D游戏开发Lua随着游戏的债券(在)的更多相关文章
- [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)
---------------------------------------------------------------------------------------------------- ...
- Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)
Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...
- 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)
在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...
- Unity 2D游戏开发教程之游戏精灵的开火状态
Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- Unity3D游戏开发——编程实现游戏管理器
本篇简介 本篇介绍了如何将上一篇的设计模式思想运用到实际的开发过程中. 脚本文件 (1)IGameManager:这个接口存在声明了一个属性(一个拥有getter函数的变量,属性的类型是Manager ...
- [Unity游戏开发]向量在游戏开发中的应用(三)
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51088236 在上一篇博客中讲了利用向量点乘在游戏开发中应用的几种情景.本 ...
- [Unity游戏开发]向量在游戏开发中的应用(一)
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50810102 向量在游戏开发中是非常实用的,我们在学校学完向量的知识后,只 ...
- [Unity游戏开发]向量在游戏开发中的应用(二)
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50972976 在上一篇博客中讲了利用向量方向的性质来解决问题.这篇博客将继 ...
随机推荐
- POJ 3211 Washing Clothes 0-1背包
题目大意: xxx很懒,但他有个漂亮又勤奋的女友 (尼玛能不能不刺激我,刚看到这题的时候发现自己的衣服没洗!!!) 可以帮他洗衣服. 洗衣服的时候要求不同的颜色的衣服不能同时洗.一人洗一件的话,问最短 ...
- Matlab-------regexp正则表达式
转自原文 Matlab-------regexp正则表达式 句点符号 '.' ——匹配任意一个(只有一个)字符(包括空格). 例如:t.n,它匹配tan. ten.tin和ton,还匹配t#n.tpn ...
- POJ 3628 Bookshelf 2 (01背包)
Bookshelf 2 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7496 Accepted: 3451 Descr ...
- iOS开发webView的使用二
#import "ViewController.h" @interface ViewController ()<UIWebViewDelegate> @property ...
- cocos2d-x win8下的环境配置和建立项目
cocos2dx 跨平台.可是看网上说开发最合适还是在vs2010中,基本是编完后再移植到安卓. 1.去官网下载源代码2.2.3版本号的. 2.然后运行根文件夹下的build-win32.bat(须要 ...
- svn pre commit
windows下的必须要用.bat文件,pre-commit.bat ================================================== @echo off set ...
- 百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源
个人官网.公司项目都需要 可视化编辑器,百度UEditor做得很不错,就用的这个.项目后台用到了SpringMVC.Freemarker,开发过程中部署在Jetty,线上部署用Tomcat,最后可能配 ...
- Ubuntu snmp配置
http://wenku.baidu.com/link?url=7ieAta_w87NDrTOT_DyEQSj4Rd9i82YRUGQl--g077oC3ftckgH7wpT5QEyir-NtZLA3 ...
- Hibernate之HQL检索(查询)方式
HQL(Hibernate Query Language)是面向对象的查询语言,与SQL非常相似.在Hibernate中,HQL是使用最广泛的检索方式. 具有下面经常使用功能: (1)在查询语句中,能 ...
- 妈蛋:kinMaxShow轮播图异常,WebUploader图片上传坑爹,图片被压缩了
今天晚上在改造轮播图. 原来的代码是这样的: <div> <img src="${static}/image/index/banner/`.jpg" /> ...