HelloWorld
unity框架 集成hybridclr luban yooasset protobuf memorypack kcp websocket等插件
Install / Use
/learn @code10088/HelloWorldREADME
快速开始
- 切换到对应平台<br> 小游戏建议使用:unity2022工程地址<br> 微信小游戏需要在Player中添加宏:WEIXINMINIGAME<br> 抖音小游戏需要在Player中添加宏:DOUYINMINIGAME<br> 注意:抖音小游戏需要移除微信导出插件,否则运行报错卡死;微信小游戏不要移除抖音导出插件,运行有报错但不影响;<br>
- 安装HybridCLR<br>
- 执行Tools/BuildBundles<br>
- 导出工程:<br> 修改Assets/Scripts/MainScripts/GameSetting.cs中的CDN<br> 配置Preferences/Customer BuildPlayer路径<br> 执行Tools/BuildProject<br><br>
后续开发内容
背包<br> 聊天<br> 好友<br> 商城<br> 选择服务器<br> 英雄展示<br> 战队<br> 任务<br> 天赋<br> 活动:首充、七天签到<br>
最终目标:周边功都有一个能用的基础版本,给游戏前端一个参考,让项目从0.5开始<br> 有问题可联系QQ:1396916098<br><br>
使用文档
工程目录结构
<br>
Build:打包导出目录、Jenkins打包脚本、版本控制文件<br>
HelloWorld:工程<br>
Luban:配置<br>
NetMsg:protocolbuffer消息<br>
SDK:Android sdk工程(暂时没有ios)<br>
<br>
Editor:编辑器工具<br>
HybridCLRData:Hybrid link<br>
Obfuz:加密相关配置<br>
Plugins:sdk、插件<br>
Scripts:MainScripts:Aot代码 SubScripts:热更代码<br>
StreamingAssets:首包资源<br>
TextMesh Pro<br>
WebGLTemplates:微信导出工具<br>
WX-WASM-SDK-V2:微信导出工具<br>
YooAsset<br>
ZRes:所有资源(Z没有意义,为了使文件夹在最后,便于查找)<br>
<br>
Assembly:热更程序集<br>
Audio:音效<br>
DataConfig:Luban配置数据<br>
Font:字体<br>
GameConfig:配置数据<br>
Model:模型<br>
Quality:高低端机配置<br>
Scene:场景相关资源<br>
Shader<br>
UI:UI相关资源<br>
Luban配置
<br>
Client:客户端代码和数据,数据使用c#_unity_bin<br>
Datas:配置表,其中ConstConfig.json是常量配置表<br>
Defines:主要是枚举配置<br>
gen.bat/gen.sh导出脚本<br>
其他可参考luban文档<br>
<br>
Unity工具中执行Tools/CopyConfig会自动执行导出脚本并复制代码和数据到工程中,需要配置Preferences/Customer Luban路径<br>
资源
导入:<br> 根据路径匹配,自动设置格式<br> 音效参考Assets/ZRes/Audio/Sound/Frequence/AudioSetting<br> 模型参考Assets/ZRes/Model/AModelSetting<br> 贴图参考Assets/ZRes/Scene/AImportSetting<br> Sprite参考Assets/ZRes/UI/Atlas/AImportSetting<br>
管理:<br> AssetManager包含Yooasset初始化、统一加载卸载接口(不提供同步接口)、获取加载进度<br> Load:加载一个或一组资源,返回唯一id<br> Unload:根据唯一id卸载资源或资源组,资源会在内存中缓存,根据CacheTime类型设置立即卸载或缓存一段时间<br> 强烈建议所有资源的加载都使用AssetManager处理,便于切换Addressable/Xasset等其他打包方案<br> 资源配置文件Assets/YooAsset/Config/AssetBundleCollectorSetting.asset<br> 其他可参考Yooasset文档<br>
热更:<br> 资源版本配置:Build/VersionConfig.txt<br> 一个AppVersion对应一个ResVersion<br> 对某个AppVersion热更只需要修改其对应ResVersion值即可<br> 如果版本文件中没有配置,说明该AppVersion需要强制更新<br> 代码热更HotUpdateCode<br> 1、检查资源版本<br> 2、Yooasset更新Manifest<br> 3、更新HotUpdateConfig.txt<br> 4、根据HotUpdateConfig.txt进行更新,包含热更代码、补充元数据、资源热更用到的界面和提示弹窗(可以更新资源更新界面)<br> 资源热更HotUpdateResData<br> 下载所有本地不存在或需要更新的资源<br> WebGl下默认不更新,边玩边下载模式<br> 如果需要静默下载模式,只需要进入游戏后开始资源热更即可<br> 热更界面在Start场景中,出包后无法修改;资源热更界面可以在代码热更过程中更新<br> 编辑器下热更测试:在ProjectSetting/Player中加入宏HotUpdateDebug、打包不使用obfuz混淆<br>
加密:<br> 代码加密启用了Obfuz所有功能<br> 资源加密EncryptionServices.cs DecryptionServices.cs<br> 其他可参考Obfuz加密文档<br> 其他可参考Yooasset加密文档<br>
打包
<br>
HybridCLRGenerate:执行Hybrid GenerateAll并copy热更代码<br>
YooAssetBuild:bundle打包<br>
UnloadBundles2CDN:上传bundle到cdn(当前使用腾讯储存桶,需要配置Preferences/Customer腾讯储存桶)<br>
cdn目录结构<br>
WebGL<br>
VersionConfig.txt(Build目录中)<br>
1.2.0<br>
xxx.bundle<br>
Android<br>
VersionConfig.txt(Build目录中)<br>
1.2.0<br>
xxx.bundle<br>
BuildBundles = HybridCLRGenerate + YooAssetBuild + UnloadBundles2CDN<br>
BuildProject:导出apk、ipa、微信小游戏工程、抖音小游戏工程<br>
Jenkins配置:<br> 使用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中的路径<br> 修改Jenkins配置中的路径<br>
组件导出工具
以UI为例<br>
新建脚本继承ComponentMark<br>
<br>
<br>
ComponentMark:收集当前节点下(包括当前节点)所有挂载MarkComponent的节点<br>
Refresh:获取所有标记的组件并关联<br>
MarkComponent:标记需要导出的组件,Element为空时标记为GameObject<br>
Refresh:自动添加当前节点主要组件,其他的可以通过拖拽添加<br>
导出属性命名规则:当前节点名+Component名(比如bgImage),所以要求需要导出的节点名不能重复<br>
不仅仅用于UI、Scene,所有需要Find/GetComponent的地方都可以使用<br>
打包bundle时会自动剔除MarkComponent<br>
UI
1、在Luban/Defindes/enum.xml中加入UIType枚举配置<br> 2、在Luban/Datas/UIConfig.xls中加入相关配置,其中Name是当前UI代码的类型名<br> 3、所有UI继承于UIBase,里面包含了常用的动画、设置图片、添加特效、复制Prefab等常用接口<br> 4、UI逻辑参考UITest<br> 5、UIManager:UI控制类,包含打开关闭UI、缓存卸载UI资源、适配、层级控制<br> 6、UIPreview:Inspector中预览UI<br> 特别提醒:<br> 同时打开两个界面,虽然资源加载完成顺序不一定,但UIManager保证UI打开顺序一定会按照代码先后顺序打开<br>
Scene
与UI类似<br> 1、在Luban/Defindes/enum.xml中加入SceneType枚举配置<br> 2、在Luban/Datas/SceneConfig.xls中加入相关配置,其中Name是当前Scene代码的类型名<br> 3、所有Scene继承于SceneBase<br> 4、Scene逻辑参考TestScene<br> 5、SceneManager:Scene控制类,包含打开关闭Scene、缓存卸载Scene资源<br> 特别提醒:<br> 同时打开两个场景,虽然资源加载完成顺序不一定,但SceneManager保证Scene打开顺序一定会按照代码先后顺序打开<br> Scene使用Prefab方式制作,这样加载卸载使用AssetManager统一接口<br> 每个场景都支持可以打开多个,需要根据id卸载<br>
网络
SocketManager:创建、断开链接<br>
SKCP:udp网络,继承于SBase<br>
STCP:tcp网络,继承于SBase<br>
SWeb:websocket网络,继承于SBase<br>
三种都实现了心跳、断线重连、粘包处理<br>
序列化/反序列化:为了兼容多种语言,使用protocolbuffer处理,如果需要使用Memorypack等其他库可自行更换<br>
NetMsgDispatch:解析后的网络消息加入队列在主线程中分发到各个模块<br>
<br>
Unity工具中执行Tools/CopyMsg会自动执行导出脚本并复制代码到工程中,需要配置Preferences/Customer Msg路径<br>
多语言
Luban/Datas/Language.xls:多语言配置<br> 使用UIText组件,i18nKey为配置中的Key<br> Runtime只加载一种语言配置<br> Editor切换多语言:Tools/Language/CN<br>
高低端机设置
Luban/Datas/DeviceInfo.xls配置指定设备分级,Name是手机型号或gpu处理器型号<br>
没有添加机型或处理器配置的话,根据机器处理器数量和内存自动确定高低档位<br>
根据档位默认设置帧率、画面质量、阴影质量、抗锯齿、后处理等<br>
如果需要修改某一项,参考UISetting<br>
<br>
核心功能
Driver:<br> 所有每帧刷新逻辑都通过Driver统一管理<br> 其中分为不切片列表和切片列表,不切片列表每帧刷新,切片列表在cpu负载的时候间隔刷新<br> StartUpdate:每帧刷新<br> StartTimer:定时器<br> StartFrame:间隔帧<br> StartTask:线程池<br> StartCoroutine:协程<br> Pool:<br> ObjectPool<T>:GameObject缓存,包含资源加载卸载<br> ObjectPoolList:ObjectPool集合<br> 基本覆盖所有缓存使用场景,具体可以查看代码实现ObjectPool.cs<br> Debug:<br> 在ProjectSetting/Player中加入宏Debug开启Debug模式,正式上线时需要关闭<br> 开启Debug后会自动显示Fps和输出窗口<br> 所有打印使用GameDebug接口,便于关闭Debug后关闭所有输出<br> Fps插件<br> Debug插件<br> EventManager:事件<br> AudioManager:音效、背景音乐<br> EffectManager:场景特效<br> ConfigManager:所有配置数据读取接口<br> DataManager:所有网络数据读取接口<br> GamePlayerPrefs:兼容微信和抖音的PlayerPrefs统一接口<br> ProcessControl:<br> 执行队列,用于流程控制,使逻辑更清晰,参考GameStart<br> 也可以用于进游戏的各种弹窗控制,参考UITest中UIProcess<br>
其他
小游戏:<br> 在ProjectSetting/Player中加入宏WEIXINMINIGAME切换到微信小游戏模式<br> 在ProjectSetting/Player中加入宏DOUYINMINIGAME切换到抖音小游戏模式<br>
Sdk:<br> Android:sdk测试代码<br> 微信:开放域数据、排行榜、各种广告<br> 抖音:TT初始化、登录、跳转导航栏、排行榜、各种广告<br>
编辑器工具:<br> Alt+D:代替ctrl+d自动按下标命名<br> 选中GameObject右键Tools/CopyPath复制路径到粘贴板<br> Ctrl+→:游戏速度×2<br> Ctrl+←:游戏速度÷2<br> Ctrl+↓:游戏速度=1<br> 快进快退快捷键<br>
具体功能模块
通用道具:<br> Luban/Datas/Items.xls:道具配置<br> CommonItem:道具GameObject缓存<br>
活动:<br> ActivityData:所有活动数据管理<br> ActivityDataBase:活动基类,包含开始、刷新、结束、红点<br>
功能解锁:<br> Luban/Datas/FunctionUnlockConfig.xls:支持条件组合<br> FunctionUnlock<br>
引导:<br> Luban/Datas/Guide.xls:引导步骤配置<br> UIGuideCollect:标记引导步骤中的GameObject<br> GuideData:引导开启、下一步、跳过、结束接口<br> 具体用法可以参考UITest<br>
画面设置:<br> UISetting:游戏中常用画面质量设置<br>
通用提示、选择界面:<br> UICommonTips:通用文字提示<br> UICommonBox:通用确认取消面板<br>
Buff、触发器:<br> BuffManager:Buff管理<br> TriggerManager:触发器管理<br>
镜头控制:<br> CameraController:上帝视角镜头,基于LeanTouch实现<br>
邮件:<br> UIMail:一键领取奖励、一键已读、删除已读等功能<br> MailData:包含测试数据,注意删除测试相关<br>
恭喜获得奖励展示:<br> UIShowReward:奖励展示界面<br> ShowRewardData:奖励展示队列<br>
Related Skills
node-connect
336.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
82.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
336.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
82.9kCommit, push, and open a PR
