GitPedia

HelloWorld

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

From code10088·Updated June 17, 2026·View on GitHub·

1. 切换到对应平台 小游戏建议使用:[unity2022工程地址](https://gitee.com/code10088/game) 微信小游戏需要在Player中添加宏:WEIXINMINIGAME 抖音小游戏需要在Player中添加宏:DOUYINMINIGAME 注意:抖音小游戏需要移除微信导出插件,否则运行报错卡死;微信小游戏不要移除抖音导出插件,运行有报错但不影响; 2. 安装HybridCLR 3. 执行Tools/BuildBundles 4. 导出工程: 修改Assets/Scripts/MainScripts/GameSetting.cs中的CDN 配置Preferences/Customer BuildPlayer路径 执行Tools/BuildProject The project is written primarily in C#, distributed under the MIT License license, first published in 2023. Key topics include: hybridclr, kcp, unity, yooasset.

快速开始

  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>

 最终目标:周边功都有一个能用的基础版本,给游戏前端一个参考,让项目从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>
 序列化/反序列化:UnsafeByteBuffer兼容多平台<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>

Contributors

Showing top 1 contributor by commit count.

View all contributors on GitHub →

This article is auto-generated from code10088/HelloWorld via the GitHub API.Last fetched: 6/23/2026