# FFramework
**Repository Path**: yaoxuanzhi/FFramework
## Basic Information
- **Project Name**: FFramework
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-08-30
- **Last Updated**: 2025-08-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
---
## 一、工程介绍
**Gameplay的核心3C要素——角色(Character)、操控(Control)和镜头(Camera),定义了游戏的规则与状态;这些要素与用户界面共同构成了游戏玩法的基础框架。**
### 介绍
1,代码热更模块基于HybridCLR。
2,资源热更及管理基于YooAsset。
3,框架基于GameFramework,并修改支持HybridCLR及YooAsset。
并实现,Jenkins自动多渠道打包,白名单灰度测试,一键发布热更资源及版本回退。
[【为什么不使用用Addressable,或者其他资源管理】](https://www.yooasset.com/docs/Introduce)
### 通过这个项目可以了解到
(1)框架为项目中提供基础功能,如资源管理、UI框架、网络通信、消息管理、场景管理、数据解析及存取等,同时定义了一系列规范包括编码的,例如参数命名、注释、缩进等
以及行为准则,例如加载场景必须用框架的xxx接口,贴图必须放在xxx文件夹下等
(2)性能优化规则:CPU,GPU,内存
(3)埋点及数据分析,协助运营及发行及时了解游戏运行状况
等一系列游戏项目开发中的知识点:
[【性能优化 跳转】](Tools/ReadMe/Optimize.md) [【小红点 跳转】](Tools/ReadMe/RedPoint.md)
[【SDK 跳转】](Tools/ReadMe/SDK.md) [【循环列表 跳转】](Tools/ReadMe/LoopScrollRect.md)
[【新手引导 跳转】](Tools/ReadMe/Guide.md) [【相机控制 跳转】](Tools/ReadMe/Camera.md)
[【导航模块 跳转】](Tools/ReadMe/Nav.md) [【技能系统 跳转】](Tools/ReadMe/Skill.md)
[【动画模块 跳转】](Tools/ReadMe/Animation.md) [【网络模块 跳转】](Tools/ReadMe/Net.md)
---
## 二、项目包含一个完整的小游戏实例
### 游戏介绍
基于GameFramework框架实现的塔防游戏,并实现无冗余资源管理及代码热更。


### 愿景
可以通过该框架,几乎可以了解到游戏开发的完整流程。
---
## 三、如何让项目运行并实现热更及资源管理
### 游戏入口流程
(1)在Main场景下,对资源及代码进行热更新(可以通过玩家的UID添加白名单灰度,只允许白名单用户下载最新资源)
(2)加载完资源会调用初始化LoadDll,加载热更Dll
(3)加载完Dll切换游戏场景,进入游戏模块
(4)游戏业务入口在GameStart场景中的ProcedureLaunch有限状态机,穿游戏运行时整个生命周期(下图所示)


### 资源管理操作
点击执行YooAsset/AssetBundle Collector,用于管理资源,这里通过成品资源对生资源依赖,进行加载,实现包体内零冗余
(1)实现了启动场景热更新,在第二次进入游戏时实现更新(暂时移除)
(2)实现了玩家边玩边下载
(3)玩家自己选择下载关卡内容
注意:生资源,成品资源路径区分。 **生资源组成成品资源,生资源为不会动态加载的资源**
### HybridCLR编辑器操作
(1)点击执行HybridCLR/Installer打开一个窗体,点击Install等待安装完成
(2)点击执行HybridCLR/Generate/All, 等待执行完毕
(3)点击执行HybridCLR/Build/BuildAssetsAndCopyToRes,将Dll生成并拷贝到资源文件夹中
**已添加自动化代码,不需要额外操作**
### YooAsset 实现本地模拟
需要利用HFS搭建一个本地服务器,确保手机和电脑处于同一网络,便可实现热更
[HFS跳转](https://github.com/rejetto/hfs)
### 其他
(1)Unity 版本使用是2022.3.xx
(2)基于URP风格化渲染管线
(3)完善UI框架,及代码自动生成工具(完善中)
---
## 四、框架介绍
### 框架基于GameFramework
使用框架的架构思想,并加以改进,如需扩展开发,只需要对GameFramework进行简单了解,可快速实现
### 渲染基于URP
基于URP风格化渲染管线(开发中)
(1)通过判断设备,启动时加载对应的低中高管线
(2)采用非真实渲染NRP
### 自动打包流程
版本发布CI&CD流程:
CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins[安装教程](https://www.jenkins.io/doc/book/installing/windows/)
Unity Editor command line arguments[Unity命令参数](https://docs.unity3d.com/2022.3/Documentation/Manual/EditorCommandLineArguments.html)
(1)支持部署Jenkins,实现自动化打包流程

-batchmode -nographics -quit -executeMethod JenkinsBuild.BuildAndroid -isHotFix $isHotFix -version $version

只需在Jenkins配置相关打包参数,即可实现发布自动化比如:
isHotFix:(bool 是否热更资源,勾选后只将资源发布到CDN不出包);
version:(string 版本号);
isLocalPack:(bool git分支验收,将所有资源打入包内);
(2)支持在编辑器内一键打包

点击Build Android,即可在工程目录build文件夹下看到FFramework.apk(有可能需要点击两次,第一次点击有可能失败)
---
## 五、FAQ
### 常见问题
(1)CDN服务器缓存问题,不能及时获取到hash, json(访问根节点耗时太久,改为文件名添加时间戳)
(2)版本灰度问题,白名单ID问题 (采用后端生成的uid,设备id有权限申请问题)
### 参考
代码热更基于 [HybridCLR跳转](https://github.com/focus-creative-games/HybridCLR)
资源热更基于 [YooAsset跳转](https://www.yooasset.com/)
框架基础基于 [GameFramework跳转](https://github.com/EllanJiang/GameFramework)
### 行业信息
不要只顾低头赶路,也要抬头看看远方
* 游戏行业数据 [游鲨游戏行业数据跳转](https://www.kdocs.cn/l/ct4bcS9xHD3K)
* 游戏行业分析 [Sensortower跳转](https://sensortower.com/zh-CN/blog)
* 记得多玩游戏 [Steam跳转](https://store.steampowered.com)
世界就是个草台班子