这篇文章MOMO主要想你们说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来讲入门极快,但是要想作好却很是的难。这篇文章的目的是让哪些已经上手Unity3D游戏引擎的朋友学会如何更好的写游戏脚本,固然本文这牢牢是我这么多年对游戏开发的认知,你也能够有你本身的见解。首先咱们看看游戏主要是由哪几部分组成的,以下图所示,任何平台下的任何游戏核心都是由:数据、逻辑、渲染三大部分组成。程序员
当你写过》=2个平台下的游戏时你会发现其实游戏开发很“容易”,为何“容易”呢?由于此时你会发现全部平台下开发游戏的模式,以下图中的“数据”与“逻辑”两部分真的是彻底同样的,这两部分是与游戏开发平台无关的。然而真正与游戏平台有关的牢牢是“渲染”这部分,由于各个游戏平台下的渲染接口是不一样的。这也就印证了一点,能把J2ME游戏写好的程序员就必然能把IOS或Android游戏一样的写好。读到这里请结合一下你的公司状况,你可能会发如今你的技术总监两三天就能上手Unity3D游戏开发 Cocos2d游戏开发,这并非他对游戏平台研究的透彻,而是他对游戏数据的掌控能力很是强,因此能很快玩转各个平台下的开发。安全
以下图所示,Unity3D这套游戏引擎在游戏开发中的权重如图中所示。其中包含100%的渲染部分 +50%左右的逻辑部分。(由于Unity3D封装了不少与逻辑相关的API供开发者使用)架构
下面咱们回到Unity3D脚本架构的编写上,咱们知道Unity3D在是能够建立游戏场景的,在每一个游戏场景中又能够建立游戏对象,把每一个场景的游戏对象融合在一块儿就是一款3D游戏。游戏场景之间属于同等级的关系,为了让游戏场景以前交互咱们须要有一个凌驾全部场景之上的脚本,我称之为“全局脚本”。以下图所示,全部场景都能与这个惟一的全局脚本进行交互。举个例子,当场景切换时可将临时逻辑数据写入全局脚本中,切换完毕后再去全局脚本中取以前保存的数据,从而实现交互。(固然还有别的办法也能实现这个效果,可是我以为这样作会更好一些,数据会更安全一些)函数
接着咱们就进入场景中,游戏场景是由若干游戏对象组成,下面我好好说一说游戏对象。游戏对象是须要绑定游戏脚本才能完成它的生命周期。那么脚本的使命就会尤为的重要。由于游戏对象比较多那么脚本必然会出现交互的状况,以下图所示,不少初期Unity3D的项目中的脚本会编写成这个样子。错综复杂相互交互,这样编写的脚本有可能你的游戏能作出来,但是你在维护的时候团队开发的时候你会发现你的脚本很是的混乱,别的同事想改都不知道怎么改。(显然这样的做法时彻底错误的)动画
咱们想一想为何脚本之间要交互,缘由很简单。是由于脚本中须要使用/调用另外一条脚本或者另外一条脚本对应的游戏对象某一项数据/方法,为了解决这个问题而致使最终的脚本很是混乱。为了不这个问题,我在开发中会这么作,以下图所示,脚本之间切记不要作直接的相互交互,脚本之间只作间接的交互。每个游戏场景都有一个凌驾全部游戏对象之上的单例脚本,在这条脚本中保存场景中全部脚本的公共数据。包括该场景的总体逻辑更新都是在这条单例脚本中完成。每条脚本都只与这个单例脚本作交互,和别的脚本一律不交互。(间接交互)架构设计
编写脚本时请注意,脚本只干属于本身最重要的事情,就跟代码中的函数同样,只干最重要的事情。切记和该条脚本无关的事情不要去管,不要在脚本中作过多的相互连带工做,让全部连带工做的话都放在全局单例脚本中来作。设计
这里咱们举一个例子,主角砍怪或技能攻击怪,怪物受伤只到怪死亡之后屏幕播放一段胜利动画。对象
1.主角对象发动攻击,全局单例脚本接受按键事件后通知主角脚本播放攻击动画。接口
2.敌人对象接受到主角发送攻击消息时开始播放受伤动画,敌人脚本接收到主角的碰撞时询问单例脚本 主角是“普通攻击、仍是技能攻击”,接着敌人播放对应的受伤动画,根据攻击类型敌人对象开始减血。生命周期
3.重复上面的操做,当敌人的血量《=0的时。敌人销毁自身对象,而且敌人脚本告诉单例脚本本身已经死亡。此时,单例脚本在调用“胜利动画”对象播放胜利动画效果。
上述逻辑我是彻底按照刚刚图片中所说明的方式来写,这样作就能够很好的避免交互交互混乱的状况,其实开发中的全部相似这种交互的状况都能很好的用这个全局单例脚原本解决。但愿广大Unity3D开发爱好者能够和我讨论,由于我知道架构设计没有最好只有更好。嚯嚯!!