这篇文章主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难。这篇文章的目的是让哪些已经上手Unity3D游戏引擎的朋友学会如何更好的写游戏脚本,当然本文这紧紧是我这么多年对游戏开发的认知,你也可以有你自己的看法。首先我们看看游戏主要是由哪几部分组成的,如下图所示,任何平台下的任何游戏核心都是由:数据、逻辑、渲染三大部分组成。

当你写过》=2个平台下的游戏时你会发现其实游戏开发很“容易”,为什么“容易”呢?因为此时你会发现所有平台下开发游戏的模式,如下图中的“数据”与“逻辑”两部分真的是完全一样的,这两部分是与游戏开发平台无关的。然而真正与游戏平台有关的紧紧是“渲染”这部分,因为各个游戏平台下的渲染接口是不同的。这也就印证了一点,能把J2ME游戏写好的程序员就必然能把IOS或Android游戏同样的写好。读到这里请结合一下你的公司情况,你可能会发现在你的技术总监两三天就能上手Unity3D游戏开发 Cocos2d游戏开发,这并不是他对游戏平台研究的透彻,而是他对游戏数据的掌控能力非常强,所以能很快玩转各个平台下的开发。

         如下图所示,Unity3D这套游戏引擎在游戏开发中的权重如图中所示。其中包含100%的渲染部分 +50%左右的逻辑部分。(因为Unity3D封装了很多与逻辑相关的API供开发者使用)

        下面我们回到Unity3D脚本架构的编写上,我们知道Unity3D在是可以创建游戏场景的,在每个游戏场景中又可以创建游戏对象,把每个场景的游戏对象融合在一起就是一款3D游戏。游戏场景之间属于同等级的关系,为了让游戏场景之前交互我们需要有一个凌驾所有场景之上的脚本,我称之为“全局脚本”。如下图所示,所有场景都能与这个唯一的全局脚本进行交互。举个例子,当场景切换时可将临时逻辑数据写入全局脚本中,切换完毕后再去全局脚本中取之前保存的数据,从而实现交互。(当然还有别的办法也能实现这个效果,但是我觉得这样做会更好一些,数据会更安全一些)

         接着我们就进入场景中,游戏场景是由若干游戏对象组成,下面我好好说一说游戏对象。游戏对象是需要绑定游戏脚本才能完成它的生命周期。那么脚本的使命就会尤其的重要。因为游戏对象比较多那么脚本必然会出现交互的情况,如下图所示,很多初期Unity3D的项目中的脚本会编写成这个样子。错综复杂相互交互,这样编写的脚本有可能你的游戏能做出来,可是你在维护的时候团队开发的时候你会发现你的脚本非常的混乱,别的同事想改都不知道怎么改。(显然这样的作法时完全错误的)

         我们想想为什么脚本之间要交互,原因很简单。是因为脚本中需要使用/调用另一条脚本或者另一条脚本对应的游戏对象某一项数据/方法,为了解决这个问题而导致最终的脚本非常混乱。为了避免这个问题,我在开发中会这么做,如下图所示,脚本之间切记不要做直接的相互交互,脚本之间只做间接的交互。每一个游戏场景都有一个凌驾所有游戏对象之上的单例脚本,在这条脚本中保存场景中所有脚本的公共数据。包括该场景的整体逻辑更新都是在这条单例脚本中完成。每条脚本都只与这个单例脚本做交互,和别的脚本一概不交互。(间接交互)

         编写脚本时请注意,脚本只干属于自己最重要的事情,就跟代码中的函数一样,只干最重要的事情。切记和该条脚本无关的事情不要去管,不要在脚本中做过多的相互连带工作,让所有连带工作的话都放在全局单例脚本中来做。

  这里我们举一个例子,主角砍怪或技能攻击怪,怪物受伤只到怪死亡以后屏幕播放一段胜利动画。

1.主角对象发动攻击,全局单例脚本接受按键事件后通知主角脚本播放攻击动画。

2.敌人对象接受到主角发送攻击消息时开始播放受伤动画,敌人脚本接收到主角的碰撞时询问单例脚本 主角是“普通攻击、还是技能攻击”,接着敌人播放对应的受伤动画,根据攻击类型敌人对象开始减血。

3.重复上面的操作,当敌人的血量《=0的时。敌人销毁自身对象,并且敌人脚本告诉单例脚本自己已经死亡。此时,单例脚本在调用“胜利动画”对象播放胜利动画效果。

上述逻辑我是完全按照刚刚图片中所说明的方式来写,这样做就可以很好的避免交互交互混乱的情况,其实开发中的所有类似这种交互的情况都能很好的用这个全局单例脚本来解决。希望广大Unity3D开发爱好者可以和我讨论,因为我知道架构设计没有最好只有更好。

from

转载于:https://www.cnblogs.com/PEPE/p/3570086.html

Unity3D之游戏架构脚本该如何来写相关推荐

  1. U3D 游戏引擎之游戏架构脚本该如何来写

    转载自:http://www.cnblogs.com/softimagewht/p/3916646.html 这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Un ...

  2. Unity3d 制定游戏循环的策略

    在使用Unity3d开发游戏的时,我们总会涉及Unity内置的生命周期函数.弄清这些函数的调用顺序和特性十分重要,因为这影响到逻辑的执行顺序,例如:初始化要在使用之前,注册回调要在响应之前等等. 通常 ...

  3. 如何做一名主程之Unity3D网络游戏服务器架构设计

    下面我们开始今天的Unity3D游戏开发技能. 初期学习目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天给大家讲一下如何做一个好 ...

  4. 移动端游戏架构设计-姜雪伟-专题视频课程

    移动端游戏架构设计-16598人已学习 课程介绍         目前很多开发者对于游戏架构设计一无所知,只是简单的把脚本与对象进行挂接,导致在后期开发中,版本维护,功能扩展非常不方便,现在网上出现了 ...

  5. android unity hook,[原创]Unity3d安卓游戏DLL动态调式与HOOK基础

    [原创]Unity3d安卓游戏DLL动态调式与HOOK基础 2016-4-4 02:40 8207 [原创]Unity3d安卓游戏DLL动态调式与HOOK基础 2016-4-4 02:40 8207 ...

  6. Unity3D 入门 游戏开发 Unity3D portal game development

    Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...

  7. [Unity3D]水族馆游戏教程一

    水族箱 文章目录 水族箱 1.工程创建 2.创建水箱 3.相机 1.工程创建 本次教程使用Unity3D 5.5.5f1版本 首先,打开工程,创建一个名为Aquarium(水族馆)的工程: 在工程中, ...

  8. 游戏c#脚本语言,C#作为脚本语言执行解密

    背景 我们知道Unity3d是通过C#脚本语言的形式来实现游戏的逻辑代码编写,同样SCOTT服务器也设置了通过C#脚本来实现游戏逻辑,但是本文并不是想真正分析解密他们的运行机制,只是想通过自己的一个需 ...

  9. Unity3D-游戏ARVR开发进阶课程 - 动画系统-宋晓波-专题视频课程

    Unity3D-游戏ARVR开发进阶课程 - 动画系统-10610人已学习 课程介绍         本套视频培训课程中会深入学习Unity中的Mecanim动画系统.包括动画剪辑.动画控制器.动画状 ...

最新文章

  1. B 站神曲damedane:精髓在于换脸,五分钟就能学会
  2. 了解这4个重点,带你探索未来将如何设计智能系统和机器人!
  3. C、C++语言容易出错的几个地方
  4. php fpm 三个模式_php-fpm运行原理和模式的简单介绍
  5. 类的加载过程一:Loading
  6. Java 128陷阱+自动装箱拆箱
  7. 漫步线性代数一——引言
  8. HTTPS学习笔记一----HTTPS的基础理论知识
  9. GUI Design Studio设计实例(附视频) :快速入门
  10. emacs自动连接mysql数据库
  11. 整数规划遗传算法MATLAB,非线性整数规划的遗传算法Matlab程序
  12. RS485/RS422接线图
  13. 项目经理,你真的是资源不足吗?
  14. XDU暑训2019 Day4 POJ2387
  15. ECharts饼状图legend显示Value所占百分比
  16. 单片机波形发生c语言,51单片机波形发生器程序设计
  17. 《Windows》Windows桌面设置
  18. html如何设置网页的背景图片,使放大或缩小浏览器时,页面排版和背景可以随浏览器放大缩小而排版不会改变,
  19. 保存Windows10随机聚焦锁屏壁纸
  20. 显示器分辨率一直跳_电脑屏幕的分辨率老是变换怎么回事?

热门文章

  1. 跨平台下移动应用的开发框架对比与分析
  2. mysql性能优化 洪斌_技术分享 | InnoDB Cluster 如何高效加载数据
  3. 以太网交换芯片行业研究及十四五规划分析报告
  4. it之家评论在线搜索
  5. 《七哥说道》第一章:风雨知秋之进城三人
  6. 【Electron-vue】创建桌面应用(12)- 修改electron窗口图标和桌面图标
  7. 浪潮信息m6服务器性能,M6四路服务器——浪潮信息新品性能显著
  8. 通过注册表配置弹出窗口阻止程序
  9. Django 慕课前后端实战 -- xadmin后台管理系统、登录模块、注册模块、邮箱激活链接、找回密码
  10. Java 初学者做的第一个微信小程序--关于Java基础