Appearance
Unity-天命6源码
求职用的,主要扒游戏管理和UI部分。想要可以找我要,我有翻译韩语完的。
游戏中最好不要使用魔法值,所有的值都应该用常量定义出来,放到Scripts/GameDefine下面。
游戏从Logo场景开始,一个简单的动画控制,播放对应商店的Logo Sprite,Logo播放完毕的时候加载Certification场景。
这个系统的UI用的是NGUI,每个面板用不同的摄像机然后叠加culling。把组件都挂到Animation下面,便于控制动画和效果
从Logo场景进入,Logo场景很简单,就是一个logo,判断了一个莫名其妙的宏,加载动画,然后进入Certification场景
Certification场景目前来的功能是验证AB包+验证身份登录(? UI部分重要的结构
C
UStartPackage_Launcher: UStartPackage
Certification下
加载脚本的顺序是:
- UStartPackage_Launcher : UStartPackage
- 这里面塞了三个全局prefab管理器
- GlobalFontManager 字体
- BGM Module 背景音乐
- UI Root Dialog 全局的UI提示弹窗
- 单例触发ULocalPlayer
- ULoginCtrl
- ULauncherCtrl
- 表驱动
- 网络
- 搞定两个UIUStartPackage 设置UI缩放和分辨率,读取预制体,加载三个模块的预制体,中间重置本地客户端的旧数据 如果PlayerPrefs中没有保存数据,则从旧文件中读取信息并保存到PlayerPrefs(我好像没怎么弄懂这东西的数据持久化是怎么管理的 Lancher完事了,会调用PostAwake自定义生命周期函数
ULocalPlayer 是“全局玩家与系统服务的聚合单例”,涵盖资源、网络、设置、前后台行为等。没有全看完,ULocalPlayer.Instance.LocalPushMgr.CancelLocalPush();里面包含了一个服务通知推送管理模块,底层推送使用的是NMSDK 聚合单例使用partial关键字分段编写,降低合作编写难度和耦合。 LobbyMenuData是大厅(战斗外)的核心数据单例,战斗时的核心数据单例使用的是另一个上下文。
此时已经初始化好了UI缩放适配,音乐,游戏设置,AB包的资源,全局字体管理器。
接下来使用的是,ULoginCtrl,
仅针对非战斗部分 首先是基础架构和业务使用分开 基础架构看 网络 数据
跨场景管理
启动与生命周期:游戏怎么从 Logo 起来,怎么进 Certification、登录、最后到大厅
资源管理:静态资源、AB 包、版本检查、补丁、缓存、本地和 CDN 的关系
配置与表驱动:CSV、字符串表、本地化、区域配置,什么时候加载最小集,什么时候加载全量
账号与网络:SDK 渠道登录、游戏服登录、握手校验、登录后拉用户数据
UI 系统:NGUI 分层、页面、弹窗、全局提示、加载中、摄像机和 culling 的组织方式
全局服务:音频、字体、推送、日志、设备适配、全局单例
场景与流程编排:谁决定下一个场景,什么时候进 Lobby,什么时候进剧情
本地持久化:PlayerPrefs、旧数据迁移、客户端设置、登录痕迹和缓存数据
网络:重点讲“怎么用”,请求怎么发、登录后怎么拉数据、模块怎么分层,不必深挖底层通信架构
表驱动:讲静态配置怎么组织、什么时候加载、和本地化/数值/功能开关的关系,再补一点本地持久化怎么落
场景管理:讲启动链路、登录到大厅、教程/恢复场景分支,谁决定跳场景
UI 架构:讲 NGUI 分层、摄像机/culling、全局弹窗、页面与弹窗的组织
MVC 业务写法:讲一个常见页面怎么拆控制器、数据、视图交互,按钮事件、状态刷新、弹窗调用、表读取、网络回包后的 UI 更新
资源管理:讲 AB 包、版本检查、启动器、为什么先补丁再登录
全局单例/基础设施职责 讲 ULocalPlayer、UGameStatices、UGameTableManager 这种大总管类怎么承担全局能力
换大厅的时候使用单例里GetLobbySkinSenceName获取皮肤按需加载不同场景,因为不同大厅皮肤里的灯光效果等等,都是不同的 换场景的时候统一抽象中转出GameLoading场景,这个场景下会清理资源AB包,等等,最后进去要进的场景,UI上也能统一加载
感觉只看不太够,得自己古法把这些坑踩一遍才有从头构造的能力。