[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的世界

最后想和大家分享是Lua语言编程的一个简单的演示样例,由于博主认为以后做游戏用脚本语言的场景会越来越多。所以能学会一门脚本语言能为你的游戏开发之路增色不少。由于博主刚開始学,所以脚本中有不足之处,希望大家能谅解。在学校的时间一天天地在降低,博主希望能和大家共同度过最后的这段时间。博主使用的是Lua5.2,使用的Sublime Text2作为脚本编辑器配合LuaDev插件进行编程的。假设大家想用懒惰点的办法,能够使用Lua for Windows这个集成环境。好了,以下開始吧,作为第一个Lua程序,我们直接给出代码,详细的语法及API大家能够自己去查阅。

--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" />

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei

转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39826323

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

版权声明:本文博主原创文章,博客,未经同意不得转载。转载请注明作者和出处,谢谢!

时间: 2024-11-06 17:43:59

[Unity3D]Unity3D游戏开发Lua随着游戏的债券(在)的相关文章

[Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培.我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:

Android游戏开发:物理游戏之重力系统开发--圆形自由落体Demo

本节为大家提供有关物理游戏的知识,讲解了一个简单的圆形自由落体Demo的编写.. Java代码 package com.himi; import java.util.Random; import java.util.Vector; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import a

Unity 2D游戏开发教程之游戏中精灵的跳跃状态

Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却无法从低的地面移动到高的地面,因为当前的游戏精灵只能左右移动,即left和right.为了解决这个问题,本节就来为精灵添加跳跃状态.   图2-14  精灵从一个地面移动到另一个地面 (1)如果要为精灵添加跳跃状态,即jump,就不得不再引入其它状态: q   landing:用于表示精灵接触到地面

Unity 2D游戏开发教程之游戏精灵的开火状态

Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 "开火"就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌人,而精灵最好具备开火的能力,否则会被敌人轻易干掉!具体的实现方法是: (1)导入一个表示子弹的图片到Unity,本示例中选用的子弹图片,名为PlayerBullet,如图2-23所示. 图2-23  导入到游戏项目的表示子弹的图片 (2)拖动此图片到Scene视图,即可在当前的游戏场景中

最大的幻术-游戏开发-我的游戏构思-环境

游戏,具体而言是游戏软件.那么,通过软件来作为载体,通过软件实现内容.一款软件能不能称为游戏在于这款软件所提供的功能是不是游戏体验. 什么是游戏,我无法给出定义.但是,游戏有什么,我们已经有了自己的答案.那么,现在我们想设计一款游戏,他是什么呢?游戏是什么类型的,有什么玩法,要达成什么目的.这里,我们先要停止思考这款游戏如何去吸引人,我们思考的是游戏软件所构建的虚拟的世界. 游戏让玩家在虚拟世界去干一件又一件的事情.因此,我最主要的关注点是游戏的场景,而作为游戏的战斗场景,我们一般称之为关卡.

Unity3D游戏开发之当游戏开发遇上Excel

各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://blog.csdn.net/qinyuanpei. 今天我们的话题是Excel,作为常用的办公软件的Excel相信大家都不陌生啦.可是如果我们认为Excel只是办公软件的话,那么这就不只是天真而是Out了.事实上Excel和游戏开发有着密切的联系,不知道大家还记不记得那款利用Excel开发出来的三国杀,这可能是Excel第一次以游戏开发的身份出现在大家面前吧.我们知道在游戏开发领域有一种工作叫做策划,就像在软件开发领

【VC++游戏开发】智力游戏——鸡蛋里挑骨头(仿扫雷)

在我学习游戏开发的过程中,遇到的最大的麻烦就是不知道一个游戏的完整实现过程,代码倒是其次. 这里,总结一下我做过的游戏.主要是梳理整每一个步骤. 先看下终于的效果 第1步,准备素材图片 包含鸡蛋.骨头,还有数字以及骨头标识和砸鸡蛋用的小锤. 第2步,声明 Egg类 它仅仅包括2个成员变量 class CEgg { public: int bitmap; //位图 int num; //数目 }; 第2步,初始化界面 1.1 还是要在CMainFrame中设置窗体參数以及图标 1.2 和 五子棋游

HTML5游戏开发,剪刀石头布小游戏案例

剪刀石头布,非常可爱的小游戏,相信大家都非常的怀念这款小游戏,小时候也玩过很多次,陪伴着我的童年的成长,现在是不是还会玩一下,剪刀石头布游戏的规则我们都知道是:剪刀剪布,石头砸剪刀,布包石头.跟朋友.同学.兄弟姐妹有意见分歧?通过“剪刀石头布游戏”来一局吧,谁赢了听谁的.躲猫猫的时候,通过“剪刀石头布游戏”来一局吧,谁输了谁找.洗衣服.做饭.扫地等等什么的,通过“剪刀石头布游戏”来一局吧,谁输了谁做.这是我的处女座游戏,学校的时候跟着培训老师一步一步写出来的,今天在这里将这款游戏分享给伙伴们,可

【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)

对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2)FileInputStream/FileOutputStream 此方式比较适合游戏的保存和使用,流文件数据存储可以保持较大的数据,而且通过此方式不仅能把数据存储在手机内存中,也能将数据保存到手机额SDcard中. (3)SQLite 此方式也适合游戏的保存和使用,不仅可以保存较大的数据,而且可以将