Skip to content

code10088/HelloWorld

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

快速开始

  1. 切换到对应平台
     小游戏建议使用:unity2022工程地址
     微信小游戏需要在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
 Build:打包导出目录、Jenkins打包脚本、版本控制文件
 HelloWorld:工程
 Luban:配置
 NetMsg:protocolbuffer消息
 SDK:Android sdk工程(暂时没有ios)

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

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

Luban配置

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

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

打包

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

 修改Build/UnityBuild.bat中的路径
 修改Jenkins配置中的路径

Pool

 GameObjectPool:缓存一个GameObject,使用异步实例化接口
 GameObjectPool:缓存多个不需要特殊处理的GameObject
 AssetObjectPool:在GameObjectPool基础上增加了资源加载缓存卸载
 AssetObjectPool:在GameObjectPool基础上增加了资源加载缓存卸载
 基本覆盖所有缓存使用场景,具体可以查看代码实现ObjectPool.cs

组件导出工具

 以UI为例
 image
 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
 Unity工具中执行Tools/CopyMsg会自动执行导出脚本并复制代码到工程中,需要配置Preferences/Customer Msg路径

高低端机设置

 Luban/Datas/DeviceInfo.xls配置指定设备分级,Name是手机型号或gpu处理器型号
 没有添加机型或处理器配置的话,根据机器处理器数量和内存自动确定高低档位
 根据档位默认设置帧率、画面质量、阴影质量、抗锯齿、后处理等
 如果需要修改某一项,参考UISetting
 image

Debug

 在ProjectSetting/Player中加入宏Debug开启Debug模式,正式上线时需要关闭
 开启Debug后会自动显示Fps和输出窗口
 所有打印使用GameDebug接口,便于关闭Debug后关闭所有输出
 Fps插件
 Debug插件

Update管理

 所有每帧刷新逻辑都通过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:所有网络数据读取接口

PlayerPrefs

 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
 快进快退快捷键

具体功能模块

活动

 ActivityData:所有活动数据管理
 ActivityDataBase:活动基类,包含开始、刷新、结束、红点

功能解锁

 Luban/Datas/FunctionUnlockConfig.xls:支持条件组合
 FunctionUnlock

引导

 Luban/Datas/Guide.xls:引导步骤配置
 UIGuideCollect:标记引导步骤中的GameObject
 GuideData:引导开启、下一步、跳过、结束接口
 具体用法可以参考UITest

画面设置

 UISetting:游戏中常用画面质量设置

通用提示、选择界面

 UICommonTips:通用文字提示
 UICommonBox:通用确认取消面板

Buff、触发器

 BuffManager:Buff管理
 TriggerManager:触发器管理


后续开发内容

 背包
 邮件
 聊天
 好友
 商城
 选择服务器
 英雄展示
 战队
 道具
 任务
 天赋
 活动:首充、七天签到

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published