SkillAgentSearch skills...

HelloWorld

unity框架 集成hybridclr luban yooasset protobuf memorypack kcp websocket等插件

Install / Use

/learn @code10088/HelloWorld
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

快速开始

  1. 切换到对应平台<br>  小游戏建议使用:unity2022工程地址<br>  微信小游戏需要在Player中添加宏:WEIXINMINIGAME<br>  抖音小游戏需要在Player中添加宏:DOUYINMINIGAME<br>  注意:抖音小游戏需要移除微信导出插件,否则运行报错卡死;微信小游戏不要移除抖音导出插件,运行有报错但不影响;<br>
  2. 安装HybridCLR<br>
  3. 执行Tools/BuildBundles<br>
  4. 导出工程:<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>

使用文档

工程目录结构

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

 image<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>

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

Luban配置

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

 image<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>

打包

 image<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>  image<br>  image<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>  image<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>  image<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

View on GitHub
GitHub Stars288
CategoryDevelopment
Updated21m ago
Forks19

Languages

C#

Security Score

100/100

Audited on Mar 26, 2026

No findings