# Game **Repository Path**: code10088/game ## Basic Information - **Project Name**: Game - **Description**: 微信小游戏测试;广告;排行榜 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 5 - **Created**: 2024-07-26 - **Last Updated**: 2025-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 快速开始 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

# 后续开发内容  背包
 邮件
 聊天
 好友
 商城
 选择服务器
 英雄展示
 战队
 任务
 天赋
 活动:首充、七天签到
 最终目标:周边功都有一个能用的基础版本,给游戏前端一个参考,让项目从0.5开始
 有问题可联系QQ:1396916098

# 使用文档 ## 工程目录结构  ![image](./Readme/1.png)
 Build:打包导出目录、Jenkins打包脚本、版本控制文件
 HelloWorld:工程
 Luban:配置
 NetMsg:protocolbuffer消息
 SDK:Android sdk工程(暂时没有ios)
 ![image](./Readme/2.png)
 Editor:编辑器工具
 HybridCLRData:Hybrid link
 Obfuz:加密相关配置
 Plugins:sdk、插件
 Scripts:MainScripts:Aot代码 SubScripts:热更代码
 StreamingAssets:首包资源
 TextMesh Pro
 WebGLTemplates:微信导出工具
 WX-WASM-SDK-V2:微信导出工具
 YooAsset
 ZRes:所有资源(Z没有意义,为了使文件夹在最后,便于查找)
 ![image](./Readme/3.png)
 Assembly:热更程序集
 Audio:音效
 DataConfig:Luban配置数据
 Font:字体
 GameConfig:配置数据
 Model:模型
 Quality:高低端机配置
 Scene:场景相关资源
 Shader
 UI:UI相关资源
## Luban配置  ![image](./Readme/4.png)
 Client:客户端代码和数据,数据使用c#_unity_bin
 Datas:配置表,其中ConstConfig.json是常量配置表
 Defines:主要是枚举配置
 gen.bat/gen.sh导出脚本
 其他可参考[luban文档](https://www.datable.cn/docs/intro)
 ![image](./Readme/5.png)
 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文档](https://www.yooasset.com/docs/Introduce)
 热更:
  资源版本配置: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混淆
 加密:
  代码加密启用了Obfuz所有功能
  资源加密EncryptionServices.cs DecryptionServices.cs
  其他可参考[Obfuz加密文档](https://www.obfuz.com/docs/intro)
  其他可参考[Yooasset加密文档](https://www.yooasset.com/docs/guide-editor/AssetBundleBuilder#%E8%B5%84%E6%BA%90%E6%96%87%E4%BB%B6%E5%8A%A0%E5%AF%86)
## 打包  ![image](./Readme/6.png)
 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、微信小游戏工程、抖音小游戏工程
 Jenkins配置:
  使用Build/JenkinsConfig/jenkins-cli.jar工具创建项目 ```   java -jar jenkins-cli.jar -s http://localhost:8888 -auth qinshuai:123456 create-job HelloWorld HelloWorld.xml
```   修改Build/UnityBuild.bat中的路径
  修改Jenkins配置中的路径
## 组件导出工具  以UI为例
 ![image](./Readme/7.png)
 ExportClass:收集当前节点下(包括当前节点)所有挂载ExportComponent的节点
   Path:代码导出路径
   ClassName:代码类名,如果需要继承可以这样写UITestComponent:UIComponent
 ExportComponent:需要导出的Component,Element为空时导出GameObject
   导出属性命名规则:当前节点名+Component名(比如bgImage),所以要求需要导出的节点名不能重复
 不仅仅用于UI、Scene,所有需要Find/GetComponent的地方都可以使用
## UI  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打开顺序一定会按照代码先后顺序打开
## Scene  与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:解析后的网络消息加入队列在主线程中分发到各个模块
 ![image](./Readme/8.png)
 Unity工具中执行Tools/CopyMsg会自动执行导出脚本并复制代码到工程中,需要配置Preferences/Customer Msg路径
## 多语言  Luban/Datas/Language.xls:多语言配置
 使用UIText组件,i18nKey为配置中的Key
 Runtime只加载一种语言配置
 Editor切换多语言:Tools/Language/CN
## 高低端机设置  Luban/Datas/DeviceInfo.xls配置指定设备分级,Name是手机型号或gpu处理器型号
 没有添加机型或处理器配置的话,根据机器处理器数量和内存自动确定高低档位
 根据档位默认设置帧率、画面质量、阴影质量、抗锯齿、后处理等
 如果需要修改某一项,参考UISetting
 ![image](./Readme/9.png)
## 核心功能  Driver:
  所有每帧刷新逻辑都通过Driver统一管理
  其中分为不切片列表和切片列表,不切片列表每帧刷新,切片列表在cpu负载的时候间隔刷新
  StartUpdate:每帧刷新
  StartTimer:定时器
  StartFrame:间隔帧
  StartTask:线程池
  StartCoroutine:协程
 Pool:
  GameObjectPool\:缓存一个GameObject,使用异步实例化接口
  GameObjectPool:缓存多个不需要特殊处理的GameObject
  AssetObjectPool\:在GameObjectPool\基础上增加了资源加载缓存卸载
  AssetObjectPool:在GameObjectPool基础上增加了资源加载缓存卸载
  基本覆盖所有缓存使用场景,具体可以查看代码实现ObjectPool.cs
 Debug:
  在ProjectSetting/Player中加入宏Debug开启Debug模式,正式上线时需要关闭
  开启Debug后会自动显示Fps和输出窗口
  所有打印使用GameDebug接口,便于关闭Debug后关闭所有输出
  [Fps插件](https://assetstore.unity.com/packages/tools/utilities/advanced-fps-counter-14656?locale=zh-CN&srsltid=AfmBOoome1MyqPBPz_3B2gop6bJsQ75K7b2CwgyLH9adguEeLANzZv1g#description)
  [Debug插件](https://github.com/yasirkula/UnityIngameDebugConsole)
 EventManager:事件
 AudioManager:音效、背景音乐
 EffectManager:场景特效
 ConfigManager:所有配置数据读取接口
 DataManager:所有网络数据读取接口
 GamePlayerPrefs:兼容微信和抖音的PlayerPrefs统一接口
 ProcessControl:
  执行队列,用于流程控制,使逻辑更清晰,参考GameStart
  也可以用于进游戏的各种弹窗控制,参考UITest中UIProcess
## 其他  小游戏:
  在ProjectSetting/Player中加入宏WEIXINMINIGAME切换到微信小游戏模式
  在ProjectSetting/Player中加入宏DOUYINMINIGAME切换到抖音小游戏模式
 Sdk:
  Android:sdk测试代码
  微信:开放域数据、排行榜、各种广告
  抖音:TT初始化、登录、跳转导航栏、排行榜、各种广告
 编辑器工具:
  Alt+D:代替ctrl+d自动按下标命名
  选中GameObject右键Tools/CopyPath复制路径到粘贴板
  Ctrl+→:游戏速度×2
  Ctrl+←:游戏速度÷2
  Ctrl+↓:游戏速度=1
  快进快退快捷键
## 具体功能模块  通用道具:
  Luban/Datas/Items.xls:道具配置
  CommonItem:道具GameObject缓存
 活动:
  ActivityData:所有活动数据管理
  ActivityDataBase:活动基类,包含开始、刷新、结束、红点
 功能解锁:
  Luban/Datas/FunctionUnlockConfig.xls:支持条件组合
  FunctionUnlock
 引导:
  Luban/Datas/Guide.xls:引导步骤配置
  UIGuideCollect:标记引导步骤中的GameObject
  GuideData:引导开启、下一步、跳过、结束接口
  具体用法可以参考UITest
 画面设置:
  UISetting:游戏中常用画面质量设置
 通用提示、选择界面:
  UICommonTips:通用文字提示
  UICommonBox:通用确认取消面板
 Buff、触发器:
  BuffManager:Buff管理
  TriggerManager:触发器管理
 镜头控制:
  CameraController:上帝视角镜头,基于LeanTouch实现