- 切换到对应平台
小游戏建议使用:unity2022工程地址
微信小游戏需要在Player中添加宏:WEIXINMINIGAME
抖音小游戏需要在Player中添加宏:DOUYINMINIGAME
注意:抖音小游戏需要移除微信导出插件,否则运行报错卡死;微信小游戏不要移除抖音导出插件,运行有报错但不影响; - 安装HybridCLR
- 执行Tools/BuildBundles
- 导出工程:
修改Assets/Scripts/MainScripts/GameSetting.cs中的CDN
配置Preferences/Customer BuildPlayer路径
执行Tools/BuildProject
周边功都有一个能用的基础版本,给游戏前端一个参考,让项目从0.5开始
有问题可联系QQ:1396916098

Build:打包导出目录、Jenkins打包脚本、版本控制文件
HelloWorld:工程
Luban:配置
NetMsg:protocolbuffer消息
SDK:Android sdk工程(暂时没有ios)

Editor:编辑器工具
HybridCLRData:Hybrid link
Obfuz:加密相关配置
Plugins:sdk、插件
Scripts:MainScripts:Aot代码 SubScripts:热更代码
StreamingAssets:首包资源
TextMesh Pro
WebGLTemplates:微信导出工具
WX-WASM-SDK-V2:微信导出工具
YooAsset
ZRes:所有资源(Z没有意义,为了使文件夹在最后,便于查找)

Assembly:热更程序集
Audio:音效
DataConfig:Luban配置数据
Font:字体
GameConfig:配置数据
Model:模型
Quality:高低端机配置
Scene:场景相关资源
Shader
UI:UI相关资源

Client:客户端代码和数据,数据使用c#_unity_bin
Datas:配置表,其中ConstConfig.json是常量配置表
Defines:主要是枚举配置
gen.bat/gen.sh导出脚本
其他可参考luban文档

Unity工具中执行Tools/CopyConfig会自动执行导出脚本并复制代码和数据到工程中,需要配置Preferences/Customer Luban路径
根据路径匹配,自动设置格式
音效参考Assets/ZRes/Audio/Sound/Frequence/AudioSetting
模型参考Assets/ZRes/Model/AModelSetting
贴图参考Assets/ZRes/Scene/AImportSetting
Sprite参考Assets/ZRes/UI/Atlas/AImportSetting
AssetManager包含Yooasset初始化、统一加载卸载接口(不提供同步接口)、获取加载进度
Load:加载一个或一组资源,返回唯一id
Unload:根据唯一id卸载资源或资源组,资源会在内存中缓存,根据CacheTime类型设置立即卸载或缓存一段时间
强烈建议所有资源的加载都使用AssetManager处理,便于切换Addressable/Xasset等其他打包方案
资源配置文件Assets/YooAsset/Config/AssetBundleCollectorSetting.asset
其他可参考Yooasset文档
代码加密启用了Obfuz所有功能
资源加密EncryptionServices.cs DecryptionServices.cs
其他可参考Obfuz加密文档
其他可参考Yooasset加密文档
资源版本配置:Build/VersionConfig.txt
一个AppVersion对应一个ResVersion
对某个AppVersion热更只需要修改其对应ResVersion值即可
如果版本文件中没有配置,说明该AppVersion需要强制更新
代码热更HotUpdateCode
1、检查资源版本
2、Yooasset更新Manifest
3、更新HotUpdateConfig.txt
4、根据HotUpdateConfig.txt进行更新,包含热更代码、补充元数据、资源热更用到的界面和提示弹窗(这样就可以更新资源更新界面)
资源热更HotUpdateResData
下载所有本地不存在或需要更新的资源
WebGl下默认不更新,边玩边下载模式
如果需要静默下载模式,只需要进入游戏后开始资源热更即可
热更界面在Start场景中,出包后无法修改;资源热更界面可以在代码热更过程中更新
编辑器下热更测试:在ProjectSetting/Player中加入宏HotUpdateDebug、打包不使用obfuz混淆

HybridCLRGenerate:执行Hybrid GenerateAll并copy热更代码
YooAssetBuild:bundle打包
UnloadBundles2CDN:上传bundle到cdn(当前使用腾讯储存桶,需要配置Preferences/Customer腾讯储存桶)
cdn目录结构
WebGL
VersionConfig.txt(Build目录中)
1.2.0
xxx.bundle
Android
VersionConfig.txt(Build目录中)
1.2.0
xxx.bundle
BuildBundles = HybridCLRGenerate + YooAssetBuild + UnloadBundles2CDN
BuildProject:导出apk、ipa、微信小游戏工程、抖音小游戏工程
使用Build/JenkinsConfig/jenkins-cli.jar工具创建项目
java -jar jenkins-cli.jar -s http://localhost:8888 -auth qinshuai:123456 create-job HelloWorld HelloWorld.xml<br>
修改Build/UnityBuild.bat中的路径
修改Jenkins配置中的路径
GameObjectPool:缓存一个GameObject,使用异步实例化接口
GameObjectPool:缓存多个不需要特殊处理的GameObject
AssetObjectPool:在GameObjectPool基础上增加了资源加载缓存卸载
AssetObjectPool:在GameObjectPool基础上增加了资源加载缓存卸载
基本覆盖所有缓存使用场景,具体可以查看代码实现ObjectPool.cs
以UI为例

ExportClass:收集当前节点下(包括当前节点)所有挂载ExportComponent的节点
Path:代码导出路径
ClassName:代码类名,如果需要继承可以这样写UITestComponent:UIComponent
ExportComponent:需要导出的Component,Element为空时导出GameObject
导出属性命名规则:当前节点名+Component名(比如bgImage),所以要求需要导出的节点名不能重复
不仅仅用于UI、Scene,所有需要Find/GetComponent的地方都可以使用
1、在Luban/Defindes/enum.xml中加入UIType枚举配置
2、在Luban/Datas/UIConfig.xls中加入相关配置,其中Name是当前UI代码的类型名
3、所有UI继承于UIBase,里面包含了常用的动画、设置图片、添加特效、复制Prefab等常用接口
4、UI逻辑参考UITest
5、UIManager:UI控制类,包含打开关闭UI、缓存卸载UI资源、适配、层级控制
6、UIPreview:Inspector中预览UI
特别提醒:
同时打开两个界面,虽然资源加载完成顺序不一定,但UIManager保证UI打开顺序一定会按照代码先后顺序打开
与UI类似
1、在Luban/Defindes/enum.xml中加入SceneType枚举配置
2、在Luban/Datas/SceneConfig.xls中加入相关配置,其中Name是当前Scene代码的类型名
3、所有Scene继承于SceneBase
4、Scene逻辑参考TestScene
5、SceneManager:Scene控制类,包含打开关闭Scene、缓存卸载Scene资源
特别提醒:
同时打开两个场景,虽然资源加载完成顺序不一定,但SceneManager保证Scene打开顺序一定会按照代码先后顺序打开
Scene使用Prefab方式制作,这样加载卸载使用AssetManager统一接口
每个场景都支持可以打开多个,需要根据id卸载
SocketManager:创建、断开链接
SKCP:udp网络,继承于SBase
STCP:tcp网络,继承于SBase
SWeb:websocket网络,继承于SBase
三种都实现了心跳、断线重连、粘包处理
序列化/反序列化:为了兼容多种语言,使用protocolbuffer处理,如果需要使用Memorypack等其他库可自行更换
NetMsgDispatch:解析后的网络消息加入队列在主线程中分发到各个模块

Unity工具中执行Tools/CopyMsg会自动执行导出脚本并复制代码到工程中,需要配置Preferences/Customer Msg路径
Luban/Datas/DeviceInfo.xls配置指定设备分级,Name是手机型号或gpu处理器型号
没有添加机型或处理器配置的话,根据机器处理器数量和内存自动确定高低档位
根据档位默认设置帧率、画面质量、阴影质量、抗锯齿、后处理等
如果需要修改某一项,参考UISetting

在ProjectSetting/Player中加入宏Debug开启Debug模式,正式上线时需要关闭
开启Debug后会自动显示Fps和输出窗口
所有打印使用GameDebug接口,便于关闭Debug后关闭所有输出
Fps插件
Debug插件
所有每帧刷新逻辑都通过AsyncManager统一管理
其中分为不切片列表和切片列表,不切片列表每帧刷新,切片列表在cpu负载的时候间隔刷新
Yooasset中的分帧操作也被归纳到AsyncManager统一管理
目前所有的代码设计没有依赖Mono,需要每帧刷新的使用Updater管理类
EventManager:用于解耦
ThreadManager:结束回调在主线程中运行,避免子线程无法使用GameObject等
webgl平台为了代码统一,可以使用ThreadManager,只是在主线程中立即执行
TimeManager
FrameManager
EffectManager:管理场景特效,自带缓存AssetObjectPool
AudioManager:音效、背景音乐,使用AssetManager CacheTime.Short缓存
CoroutineManager:c#迭代器取代Unity协程,由于继承于Mono所以也可以调用Unity协程
ConfigManager:所有配置数据读取接口
DataManager:所有网络数据读取接口
GamePlayerPrefs 兼容微信和抖音的PlayerPrefs统一接口
ProcessControl 用于流程控制,使逻辑更清晰,参考GameStart;也可以用于进游戏的各种弹窗控制,参考UITest中UIProcess
在ProjectSetting/Player中加入宏WEIXINMINIGAME切换到微信小游戏模式
在ProjectSetting/Player中加入宏DOUYINMINIGAME切换到抖音小游戏模式
Android:sdk测试代码
微信:开放域数据、排行榜、各种广告
抖音:TT初始化、登录、跳转导航栏、排行榜、各种广告
Alt+D:代替ctrl+d自动按下标命名
选中GameObject右键Tools/CopyPath复制路径到粘贴板
Ctrl+→:游戏速度×2
Ctrl+←:游戏速度÷2
Ctrl+↓:游戏速度=1
快进快退快捷键
ActivityData:所有活动数据管理
ActivityDataBase:活动基类,包含开始、刷新、结束、红点
Luban/Datas/FunctionUnlockConfig.xls:支持条件组合
FunctionUnlock
Luban/Datas/Guide.xls:引导步骤配置
UIGuideCollect:标记引导步骤中的GameObject
GuideData:引导开启、下一步、跳过、结束接口
具体用法可以参考UITest
UISetting:游戏中常用画面质量设置
UICommonTips:通用文字提示
UICommonBox:通用确认取消面板
BuffManager:Buff管理
TriggerManager:触发器管理
背包
邮件
聊天
好友
商城
选择服务器
英雄展示
战队
道具
任务
天赋
活动:首充、七天签到