您当前所在位置: > 爆料站 > 好好玩

游戏开发框架设计规则!_RegEvent

时间:2020-02-28 20:53:07  来源:  作者:网络

原标题:游戏开发框架设计规则!

目的

  • 新增新功能时更加快速便捷,不会导致其他模块的改变,上下文清晰,更不容易出逻辑缺陷
  • 方便调试时理清逻辑关系,快速定位问题
编程思维
  • DOTS、OOP、组件式开发的优缺点
  • 设定条条框框的规则,能尽量private就尽量private,强迫程序员设计出更好的代码
Singleton
  • 优点
    • 简单易用
    • 内部不透明,无需了解内部实现直接用(多用于工具类)
  • 缺点
    • 引用混乱
    • 代码依赖性和耦连
    • 违反匿名者原则(越少人知道越好)
  • 不用它,可以强迫设计出更好的代码
低耦合 中间件和单例模式 综述
  • 强调 系统间 的交互
  • 系统之间不要直接交流,而是通过中间件交流,例如事件管理器,观察者模式
  • 尽量不用单例模式,全局变量容易交叉使用,造成理解混乱和系统之间的耦连
  • 分离判端逻辑和执行逻辑
例子
  • 游玩过程每获得100金币则获得一个成就,并且播放成就音效
糟糕的代码:
publicclassGameCoreSystem: MonoBehaviour { privatevoidGameLoop( ) { ... //游戏逻辑 //金币大于100时 if(coin++ > 100) { coin = 0; //成就系统获得成就 AchievementManager.instance.Achieve( "coin_over_100"); //音频系统播放音频 AudioManager.instance.PlayOneShot( "coin_over_100_audio"); } } }

现在看起来复杂,执行效率看起来很低,但是方便以后维护的代码:

usingPeroTools2.Commons; usingPeroTools2.Managers;

publicclassGameEvent{//全局变量事件publicconstintON_COIN_OVER_100 = 1; }

publicclassGameCoreSystem{privateintm_Coin;

privatevoidUpdate( ) {//...//每获得100金币触发成就事件if(m_Coin++ > 100) {m_Coin = 0; EventManager.instance.Invoke(GameEvent.ON_COIN_OVER_100);}}}

publicclassAchievementManager{publicAchievementManager( ) {//注册"获得成就"的事件EventManager.instance.RegEvent(GameEvent.ON_COIN_OVER_100).trigger += OnAchieved;}

privatevoidOnAchieved( objectsender, objectreciever, object[] args ) {//获得成就后的逻辑varachievementUid = ( int)args[ 0]; if(achievementUid == GameEvent.ON_COIN_OVER_100) {//...}}

~AchievementManager{//随着成就系统内存释放,去掉注册事件EventManager.instance.RegEvent(GameEvent.ON_COIN_OVER_100).trigger -= OnAchieved;}}

publicclassGameAudioSystem: AudioManager{protectedoverridevoidOnInit( ) {//在音频系统注册"获得成就"的事件EventManager.instance.RegEvent(GameEvent.ON_COIN_OVER_100).trigger += OnTrigger;}

privatevoidOnTrigger( objectsender, objectreciever, object[] args ) {//实现逻辑PlayOneShot( "sfx_button_enter"); }

privatevoidOnDestroy( ) {//随着音频系统内存释放,去掉注册事件EventManager.instance.RegEvent(GameEvent.ON_COIN_OVER_100).trigger -= OnTrigger;}}

高内聚: internal和Assembly Definition 综述

  • 强调 系统内 逻辑
  • 程序集去代表一个模块的功能,上级只引用该程序集中仅有的一个对外的管理该程序集的类
  • 强迫程序员设计出更好的代码,高内聚更体现代码的复用性
  • 编译根据程序集来进行,节约时间
MD2的框架设计
  • 脑图

  • 程序集和目录结构

  • 设计原则
  1. 一个程序集所有类可以对外public,有一个管理的类,名称为$"{程序集名称}System",有一个单例静态引用为internal,方便其他子系统访问
  2. 除了NoteSystem,所有类的对外接口限定词为internal,包括构造函数,保证了接口的封闭性与安全性
  3. 一个母系统配合几个子系统完成这个系统模块的功能,从而提供对外统一在大系统的接口,保证代码设计的高内聚
publicclassNoteSystem{///<summary>///Note包含了这个Note的特定数据 ///如什么时候是最佳打击点,是空中还是地面等 ///</summary>publicstructNote {publicinttick { get; } publicbytenoteDataUid { get; } publicNoteDataSystem.NoteData noteData => instance.m_NoteDataSystem.GetNoteData(noteDataUid);

internalNote( int_tick, byte_noteDataUid ) {tick = _tick;noteDataUid = _noteDataUid;}}

privateNativeArray<Note> m_Notes;

privatereadonlyNoteDataSystem m_NoteDataSystem;

privatereadonlyNoteTickSystem m_NoteTickSystem;

internalstaticNoteSystem instance;

publicNoteSystem( ) {instance = this; m_NoteDataSystem = newNoteDataSystem; m_NoteTickSystem = newNoteTickSystem; }...

NoteDataSystem

publicclassNoteDataSystem{publicstructNoteData {publicbyteuid { get; } publicbytetype { get; } ...

privateList< string> GetStrings( intnumber, List< string> list ) {...}

internalNoteData( byte_uid, byte_type, uint_score, uint_hp, uint_mp, uint_damage, byte_audio, byte_effect, int_bmss, int_renderer ) {...}

internalvoidSetNoteData( stringbms, stringscene ) {...} }

privateNativeArray<NoteData> m_NoteDatas; ...

internalNoteDataSystem( ) {...}

internalNoteData GetNoteData( stringbms, stringscene ) {...}

internalNoteData GetNoteData( byteuid ) {...}

~NoteDataSystem {...}}

NoteTickSystem

namespaceGameCore.Note{publicclassNoteTickSystem{///<summary>///NoteTick是以毫秒为单位分布在Note周围的判定点 ///如一首歌有100个Note,一个Note的有-50ms~50ms的判定(包括Great、Perfect之类的),那么这首歌就有100 * 100个NoteTick ///</summary>publicstructNoteTick {publicbyteuid { get; } publicbyteoffset { get; } publicboolisLeft { get; }

internalNoteTick( byte_uid, byte_offset, bool_isLeft ) {uid = _uid;offset = _offset;isLeft = _isLeft;}}

privateDictionary< int, NativeArray<NoteTick>> m_NoteTicks;

internalNoteTickSystem( ) {}

internalvoidSetup( NativeArray<NoteSystem.Note> notes) {Debug.Log( "NoteTickSystem Setup!"); }

internalNativeArray<NoteTick> GetNoteTicks( inttick ) {returnm_NoteTicks[tick]; }...

  • GameCoreSystem也同理
namespaceGameCore{publicclassGameCoreSystem{privateNoteSystem m_NoteSystem;

publicGameCoreSystem( ) {m_NoteSystem = newNoteSystem; }...

PeroTools2

  1. 部分Mnanager将不再支持外部的单例模式,游戏过程用到的Manager并且和特定属性有关的去单例,如AudioManager、UIManager、ServerManager、SceneManager,要承接上下文的则不去单例,如ResourcesManager、ConfigManager、CoroutineManager。
//新增SingletonInternal只针对PeroTools2内部拥有单例模式publicclassSingletonInternal<T> whereT: new{privatestaticT s_Instance;

internal staticT instance {get{if(s_Instance == null) {s_Instance = newT; Singleton.Init(s_Instance);}returns_Instance; }}

publicvoidReset{Singleton.Destroy(s_Instance);s_Instance = default; }}

publicclassSingleton<T> : SingletonInternal<T> where T : new{publicnewstaticT instance => SingletonInternal<T>.instance; }

  1. 通用代码的叫Manager, 特殊代码的叫System
  2. 无法单例的Manager通过继承来完成功能
publicclassGameAudioSystem: AudioManager{protectedoverridevoidOnInit( ) {EventManager.instance.RegEvent(GameEvent.ON_COIN_OVER_100).trigger += OnTrigger;}

privatevoidOnTrigger( objectsender, objectreciever, object[] args ) {PlayOneShot( "sfx_button_enter"); }

privatevoidOnDestroy( ) {EventManager.instance.RegEvent(GameEvent.ON_COIN_OVER_100).trigger -= OnTrigger;}}

其他 Unity如何创建程序集

  • 引用上你需要用到的其他程序集
  • 不同平台程序集的开启和关闭
设计模式
Zenject
  • 反注入依赖

来源:Muse Dash主程,peropero技术渣渣担当游戏网

责任编辑:

相关下载

玩家评论

《Stoneshard》游戏评测——是真硬核还是没做好?

【导读】“只有在一个游戏完善到一定程度时,讨论硬核才有意义”。-->     2月7日,steam商店上架了一款独立游戏——《Stoneshard》详情>>

阅读: 0
日期: 2020-02-28
撞头赛车——这游戏手残党也能玩得风生水起!

大家好,欢迎阅读234游戏的小编带来的游戏资讯,这一篇小编将跟大家分享一下《撞头赛车——这游戏手残党也能玩得风生水起!》的相关视频,快跟着234游戏的小编一起来看看详情>>

阅读: 5
日期: 2020-02-28
撞头赛车——这游戏比的是谁的头铁!

大家好,欢迎阅读234游戏的小编带来的游戏资讯,这一篇小编将跟大家分享一下《撞头赛车——这游戏比的是谁的头铁!》的相关视频,快跟着234游戏的小编一起来看看吧!详情>>

阅读: 5
日期: 2020-02-28
Epic喜加一!探索飞行游戏《InnerSpace》限时免费领

又到了大家最爱的喜加一时间了,Epic本周送出探索飞行游戏《InnerSpace》,领取时间为即日至3月6日。下周Epic将送出平台游戏《GoNNER》和RTS游戏《外详情>>

阅读: 4
日期: 2020-02-28
找回主机游戏仪式感!腾讯黑鲨游戏手机3Pro竟搭载机械游戏按键_智玩

原标题:找回主机游戏仪式感!腾讯黑鲨游戏手机3 Pro竟搭载机械游戏按键 自2020年2月24日腾讯黑鲨游戏手机3正式官宣以来,黑鲨科技不断的放出了关于黑详情>>

阅读: 0
日期: 2020-02-28
“冷饭界特级厨师”卡普空再出手!20年前老游戏究极进化,再次拔高重制游戏天花板

大家好,我是X博士。 一直以来靠着炒冷饭而闻名天下的卡婊,这几年凭借一波高质量的MHW和生化2重制口碑彻底翻身,直接变身成大家的“婊贝”。 它不详情>>

阅读: 3
日期: 2020-02-28
2020年第一家上市游戏公司出炉,四成收入来自两款游戏

日前,港交所披露了九尊数字互娱集团控股有限公司通过上市聆讯的招股书。资料显示,九尊互娱首次递交港股主板的上市申请时间是2018年3月,该申请失效后详情>>

阅读: 6
日期: 2020-02-27
苹果严查游戏版号国内中小游戏公司又要倒一批?_Store

原标题:苹果严查游戏版号 国内中小游戏公司又要倒一批? 外汇天眼APP讯 : 近日,有国内开发商发现,苹果中国推送“上架游戏需有批文号(下称版号)”的新规详情>>

阅读: 6
日期: 2020-02-27
奥特曼的游戏要来了?国外媒体透露,白金新款游戏或是光之巨人_Project

原标题:奥特曼的游戏要来了?国外媒体透露,白金新款游戏或是光之巨人 对于经常玩游戏或者了解游戏的朋友来说,相信都应该知道白金工作室吧,白金工作室成详情>>

阅读: 2
日期: 2020-02-27
停课不停学---徐工数元游戏更新啦!

哈喽,小朋友们好,快来看看今天数元王国的---君君老师给大家带来的是什么好玩的手指游戏呢? 请出你的小手,一起来玩吧! 两只老虎 徐工数元 shu详情>>

阅读: 8
日期: 2020-02-27
近年出现许多游戏题材动漫,相比剧情内容,更希望能玩上这些游戏

游戏是现实生活中每个人都会接触到的东西,不过现在还被大家认为游戏是不务正业的象征,其实不然,游戏能够很好的放松心情,让我们更加活跃一点。在动漫详情>>

阅读: 7
日期: 2020-02-27
新一批游戏版号下发,玩家激增赛事停办,疫情对游戏行业的五大影响_相关

原标题:新一批游戏版号下发,玩家激增赛事停办,疫情对游戏行业的五大影响 自新冠疫情爆发以来,各行各业都受到了巨大的影响。游戏行业由于自身的特殊性详情>>

阅读: 6
日期: 2020-02-27
4个游戏人在家办公的第25天_李子凡

原标题:4个游戏人在家办公的第25天 疫情在继续,生活,也在继续。 三个月,疫情从首例确认到扩散至今已经持续三个月了。截止2月25日,全国确诊77779例,死亡详情>>

阅读: 4
日期: 2020-02-26
热血传奇:游戏官方奇葩做法,外挂融入游戏没想到成为经典操作_蜡烛

原标题:热血传奇:游戏官方奇葩做法,外挂融入游戏没想到成为经典操作 外挂一直都是各大网游最为抵制的,很多网游都是因为外挂的侵扰导致游戏没落。在当详情>>

阅读: 6
日期: 2020-02-25
入门全攻略 37游戏《杯莫停》英雄系统上线_游戏新闻

  37网游旗下,2D动漫轻武侠37《杯莫停》为你演绎全新江湖世界。仗剑红尘,豪气干云,360度全自由开放武侠世界,带你领略荡气回肠的江湖冒险。莫负生平志,冠盖满京华,全新英雄系详情>>

阅读: 8
日期: 2020-02-25
游戏推荐60秒:《Artifact》刀牌正式解锁上线抖音游戏游戏steam游戏</title><metahttp-equiv="Cache-Control"con

游戏推荐60秒:《Artifact》刀牌正式解锁上线抖音游戏 游戏 steam游戏 详情>>

阅读: 5
日期: 2020-02-25
《洛克人Zero/ZX遗产合集》IGN8分游戏性都非常棒

【导读】卡普空的《洛克人Zero/ZX遗产合集(Mega Man Zero/ZX Legacy Collection)》即将于2月26日正式发售,媒体评分也是陆续公布。今日(2月25日),IGN为其打出8分,表示《洛克人Zero/详情>>

阅读: 6
日期: 2020-02-25
xCloud游戏阵容新增5款游戏包含《瘟疫传说:无罪》_Preview

原标题:xCloud游戏阵容新增5款游戏 包含《瘟疫传说:无罪》 微软旗下云游戏服务Project xCloud进入测试阶段已有一段时间,从xCloud Preview服务开启到详情>>

阅读: 5
日期: 2020-02-24
成果小号更新动态分享游戏趣事期待明日上线的游戏女孩_直播间

原标题:成果小号更新动态分享游戏趣事 期待明日上线的游戏女孩 今日,成果小号更新一条动态,分享了自己打游戏时发生的趣事。成果在微博中透露了自己详情>>

阅读: 6
日期: 2020-02-24
53款游戏版号下发2019已过审1468款游戏|矩阵一周记_直播

原标题:53款游戏版号下发 2019已过审1468款游戏 | 矩阵一周记 | 业界动态 ◢中宣部:2019年过审1468款游戏 四个要求 五点建议 12月18日至19日,由国家新闻出版详情>>

阅读: 4
日期: 2020-02-24
234游戏网布局国际化战略,机遇与挑战并存

2020年,中国游戏市场正发生翻天覆地的变化,对234游戏网来说既是机遇又是挑战。 234游戏网是一个专业的手游、网游、单机游戏下载网站,精选最新游戏热门排行榜,发布一手游戏资讯详情>>

阅读: 11
日期: 2020-02-24
黑鲨游戏手机宣布品牌升级无惧一切挑战创造不止游戏_玩家

原标题:黑鲨游戏手机宣布品牌升级 无惧一切挑战创造不止游戏 【手机中国新闻】今日上午,黑鲨游戏手机官方正式宣布,首款5G游戏手机腾讯黑鲨游戏手机3详情>>

阅读: 4
日期: 2020-02-24
游戏续作《坎巴拉太空计划2》将由Take Two工作接手开发!

大家好,欢迎阅读234游戏的小编带来的游戏资讯,上一篇小编分享了一下《《微软飞行模拟》最新爆料,包含约3.7万个机场!》的相关讯息,这一篇小编将跟大家分享一下《游戏续作《坎巴拉详情>>

阅读: 8
日期: 2020-02-24
游戏续作《骑士精神2》内容简介评测!

大家好,欢迎阅读234游戏的小编带来的游戏资讯,上一篇小编分享了一下《B社已于GeForce Now撤下大部分游戏,如今仅剩《德军总部:新血脉》!》的相关讯息,这一篇小编将跟大家分享一下详情>>

阅读: 6
日期: 2020-02-24
《影子武士》开发商今年公布两款游戏3A级游戏体验

【导读】近日,《影子武士》开发商Flying Wild Hog CEO在接受采访时透露,目前有三个未公布的游戏正在开发,其中有两个会在今年公布。第三款作品将是“一个原创的动作游戏,有着非详情>>

阅读: 5
日期: 2020-02-24
游戏《星际公民》众筹已超2.69亿美元,最新资讯与行星相关!

大家好,欢迎阅读234游戏的小编带来的游戏资讯,上一篇小编分享了一下《《夜行侦探:重生恐惧》将于本月27日推出Switch版本!》的相关讯息,这一篇小编将跟大家分享一下《游戏《星际详情>>

阅读: 9
日期: 2020-02-24
黑鲨宣布品牌升级!创造不止游戏的黑鲨游戏手机3不远了_吴世敏

原标题:黑鲨宣布品牌升级!创造不止游戏的黑鲨游戏手机3不远了 相比主流的智能手机,游戏手机则是比较年轻的手机系列,首款黑鲨游戏手机到现在也就不到详情>>

阅读: 8
日期: 2020-02-23
游戏新闻|《集合啦!动物森友会》公布新视频展示游戏细节​

2020.02.22 星期六 1 《集合啦!动物森友会》公布新视频展示游戏细节 任天堂在最近一次直面会上公布了《集合啦!动物森友会》的大量新内容,今天详情>>

阅读: 10
日期: 2020-02-22
《该死的混蛋》游戏在哪下载 游戏下载介绍

导 读 该死的混蛋游戏下载。该死的混蛋游戏是一款风格清奇的格斗游戏,感受顶尖的战斗闯关乐趣,下面小编就给大家带来了《该死的混蛋》游戏下载介绍,感兴趣的小伙伴快来下载吧~详情>>

阅读: 6
日期: 2020-02-22
三大赛车游戏对比——地平线4、飙酷车神2、极品飞车21,画质体验操作评测

大家好,欢迎阅读234游戏的小编带来的游戏资讯,这一篇小编将跟大家分享一下《三大赛车游戏对比——地平线4、飙酷车神2、极品飞车21,画质体验操作评测》的相关视频,快详情>>

阅读: 24
日期: 2020-02-22
《动物之森:新地平线》游戏片段全方位展示游戏细节

【导读】任天堂在近日举办了一场《动物之森:新地平线》的直面会,为玩家展示了大量内容,美国任天堂官网在今天上传了大量的游戏片段,将游戏中的细节部分全方位的展示给了玩家。--详情>>

阅读: 7
日期: 2020-02-22
B社宣布将退出NVIDIA云游戏服务仅留下一款游戏

【导读】最近英伟达的云游戏平台似乎发展并不是很顺利,继暴雪游戏下架之后,B社也要求NVIDIA从云游戏平台GeForce Now上撤下他们的大部分游戏。这样一来,B社的游戏唯一还在的仅详情>>

阅读: 7
日期: 2020-02-22
重生娱乐CEO表示FPS专精不可取自家游戏需要多样化

【导读】重生娱乐(Respawn Entertainment)这家总部位于美国的视频游戏工作室主要以开发FPS而闻名。作为CEO,Vince Zampella对于自家工作室被定位为FPS游戏开发者而感到沮丧。近详情>>

阅读: 9
日期: 2020-02-22
RespawnCEO表示自家游戏需要更加多样化_Apex

原标题:Respawn CEO表示自家游戏需要更加多样化 在玩家看来,Respawn Entertainment似乎因为开发各种FPS游戏而赢得了声誉。这家总部位于美国的视频详情>>

阅读: 10
日期: 2020-02-22
《坎巴拉太空计划2》由T2新工作室接手将专注游戏开发

在去年的德国科隆游戏展上,航天模拟游戏《坎巴拉太空计划2》正式公布。之后本作除了跳票就没有其他消息放出。据pcgamer报道,该作的开发将由Take-Two详情>>

阅读: 7
日期: 2020-02-21
游戏人正在行动,一批疫情相关游戏已上线

早晨睁眼便查看疫情最新动态、戴好口罩才外出、出入小区出示出行卡已成为我的习惯,这都源于12月便初现苗头的新冠状病毒肺炎,在这场全民抗“疫”战斗详情>>

阅读: 5
日期: 2020-02-21
精彩推荐