GF框架+XIL 项目整合

article/2025/11/10 20:49:11

项目unity版本:2020.3.18f1
XIL版本:Commits on Oct 26, 2021
GameFramework版本:Commits on Sep 28, 2021
UnityGameFramework版本:Commits on Oct 28, 2021
StarForce版本:Commits on Aug 9, 2021
HFS版本:2.3


项目克隆:

StarForce克隆仓库:https://github.com/EllanJiang/StarForce
UnityGameFramework克隆仓库:https://github.com/EllanJiang/UnityGameFramework
GameFramework克隆仓库:https://github.com/EllanJiang/GameFramework
GameFramework使用手册看源码

StartForce源码配置

1.在StarForce\Assets\GameFramework放入UnityGameFramework
2.在StarForce\Assets\GameFramework\UnityGameFramework\Libraries,把dll换成GameFramework内容。此时会报错,缺少命名空间引用。右键Libraries目录Assembly Definition生成名为GameFramework的程序集,找到UnityGameFramework.Editor和UnityGameFramework.Runtime添加GameFramework程序集的引用,报错即可消失。
3.检查不安全代码的勾是否勾上。

模拟远程AB热更配置

HFS 虚拟文件服务器

HFS下载地址:HFS

AB配置

在这里插入图片描述

在这里插入图片描述

打包出来目录结构是这样子的

在这里插入图片描述

在AB目录创建一个名为version.txt的文件,以json协议检查AB配置,配置此文件最好打开VersiongInfo.cs脚本配合食用,毕竟不知道代码变更,如果只是抄我的字段,那此坑得填。

namespace StarForce
{public class VersionInfo{// 是否需要强制更新游戏应用public bool ForceUpdateGame{get;set;}// 最新的游戏版本号public string LatestGameVersion{get;set;}// 最新的游戏内部版本号public int InternalGameVersion{get;set;}// 最新的资源内部版本号public int InternalResourceVersion{get;set;}// 资源更新下载地址public string UpdatePrefixUri{get;set;}// 资源版本列表长度public int VersionListLength{get;set;}// 资源版本列表哈希值public int VersionListHashCode{get;set;}// 资源版本列表压缩后长度public int VersionListCompressedLength{get;set;}// 资源版本列表压缩后哈希值public int VersionListCompressedHashCode{get;set;}}
}

在这里插入图片描述

这里的VersionList数据根据StarForce\AB\BuildReport\0_1_0_XX\BuildLog.txt找到

{"ForceGameUpdate":false,//是否强制更新"LatestGameVersion":"0.1.0",//最新的游戏版本号"InternalGameVersion":1,//最新的游戏内部版本号"InternalResourceVersion":3,//最新的资源内部版本号"UpdatePrefixUri":"http://10.23.48.21/Windows64", //服务器资源更新地址"VersionListLength":7104,//特指GameFrameworkVersion.xxxxx.dat文件的大小"VersionListHashCode":2063015162,//GameFrameworkVersion.xxxxx.dat文件hash"VersionListCompressedLength":2559,//特指GameFrameworkVersion.xxxxx.dat文件压缩后的大小"VersionListCompressedHashCode":-131527863,//GameFrameworkVersion.xxxxx.dat文件压缩后的hash"END_OF_JSON":""//结束符
}

打开文件StarForce\Assets\GameMain\Configs\BuildInfo.txt

{"GameVersion": "0.1.0",//最新的游戏版本号"InternalGameVersion": 0,//最新的游戏内部版本号"CheckVersionUrl": "http://10.23.48.21/Version.txt",//服务器文件version.txt地址"WindowsAppUrl": "http://10.23.48.21/Windows64",//win资源服务器"MacOSAppUrl": "https://starforce.gameframework.cn",//macOS资源服务器"IOSAppUrl": "https://starforce.gameframework.cn",//ios资源服务器"AndroidAppUrl": "https://starforce.gameframework.cn",//android资源服务器"END_OF_JSON": ""
}

打开HFS.exe,往里面存放full目录下的Window64和version.txt文件
在这里插入图片描述

检查Procedure是否都勾上
在这里插入图片描述
去掉Editor Resource Mode勾
在这里插入图片描述
打包运行。

代码热更

XIL仓库地址:XIL
XIL使用手册看官方文档和源码

给StartForce配置XIL

1.把Demo、hotScripts、XIL三个目录放到StartForce/Assets目录下在这里插入图片描述

2.在StartForce目录下新建HotProject~放入XIL目录下的Hot目录、DyncDll.csproj文件、Hot.sln解决方案在这里插入图片描述

在这里插入图片描述

修复编译报错

1.Hot.sln解决方案,在解决方案看dll引用,如果报黄色警告都是需要修复,
在这里插入图片描述
2.打开DyncDLL.csproj文件,修改依赖路径。
在这里插入图片描述
3.如何修呢,怎么知道哪些需要哪些不需要呢,我秉承一贯原则,有需要才加,像Analytics(Services玩家数据埋点接口)、Newtonsoft.Json(json工具)、Purchasing.Common、UntiyEngine.Purchasing(IAP内购支付接口)等我都直接删除.剩下些必要的就修改本机对应路径就行。

4.编辑器跑一下demo,修复奇奇怪怪的报错

5.测试热更前,做一下准备。

1.该在GF哪个流程加载dll?

ProcedurePreload.PreloadResource进行资源加载。

        private void PreloadResources(){// Preload configsLoadConfig("DefaultConfig");// Preload data tablesforeach (string dataTableName in DataTableNames){LoadDataTable(dataTableName);}// Preload dictionariesLoadDictionary("Default");// Preload fontsLoadFont("MainFont");LoadDLL("DyncDll");//GameEntry.Procedure.gameObject.AddComponent<HelloWorld>();}private void LoadDLL(string dllName){string dllAssetName = AssetUtility.GetDLLAsset(dllName, false);//Debug.Log(dllAssetName);GameFrameworkLog.Debug("dll:{0}",dllAssetName);m_LoadedFlag.Add(dllAssetName, false);GameEntry.Resource.LoadBinary(dllAssetName, new LoadBinaryCallbacks((assetName, asset, duration, userData) =>{m_LoadedFlag[dllAssetName] = true;GameFrameworkLog.Debug(asset);GameFrameworkLog.Debug(userData);GameFrameworkLog.Debug(duration);GameFrameworkLog.Debug(assetName);
#if USE_HOTwxb.hotMgr.DLL = asset;wxb.hotMgr.isGF = true;
#endifHelloWorld hellowrod = GameEntry.WebRequest.gameObject.AddComponent<HelloWorld>();Debug.Log(asset);},(assetName, status, errorMessage, userData) =>{Log.Error("Can not load font '{0}' from '{1}' with error message '{2}'.", dllAssetName, assetName, errorMessage);}));}

2.dll以什么形式打AB包?

把DyncDll.dll改成DyncDll.dll.bytes
以Load From Binary形式进行打包和加载。
在这里插入图片描述

3.XIL现在能支持什么形式加载域?

demo里例子是支持文件加载。客户端打包exe的GF加载框架需要添加以byte[]加载适配。

		byte[] dll { get; set; }public EditorResLoadRuntime(byte[] dll){this.dll = dll;}public Stream GetStream(){return new MemoryStream(dll);}

完整代码会上传到github仓库
仓库地址:GF-XIL
1.安装hfs,把打包的资源和version.txt放上去。
2.更改version.txt的UpdatePrefixUri为你自己的ip地址
3.更改BuildInfo文件里的ip为你自己的ip地址
4.把StarForce Launcher、Main、Menu场景放入BuildSettings里,打包出一个可以运行exe.运行即可.
5.如果想要在编辑器运行demo,点击Hotfix inject in Editor即可。
在这里插入图片描述

StarFroce+XIL整合总结

跑起来。中间因为文档的缺少,不得不去啃源码。
还好加了群,大家回答都很热情。因为问和答有个时间差,还闹了低级错误,妄想直接给dll打AB包,
为此还改了配置和源码(unity不能给识别不出来的资产打包(也许改底层打包源码可以)),MD是我不配,哈哈哈。

总的来说,网上的文档详细的有可能有些细节就过时了,还是需要自己多多打断点跑源码。


http://chatgpt.dhexx.cn/article/B3B0sQeK.shtml

相关文章

有关 MicroBlaze中xil_prinf/pirntf/print的一些问题

三个函数有什么区别 1.依赖的库文件不同 printf使用C标准库头文件stdio.h print/xil_printf使用xilinx定义的头文件xil_printf.h 2.能够输出的格式不同 print只能打印字符串,不可以带参数格式化输出&#xff0c;函数在print.c中定义 xil_printf可以带参量打印&#xff0c;但是不…

只针对个人遇见卡在Xil_DataAbortHandle循环while的解决办法

只针对本人所遇见的情况&#xff1a; 部分代码&#xff1a;unique_ptr<SatNoSnr[]> SatNo_Snr_Read_main(new SatNoSnr[Wrtie_Num]);// SatNo_Snr_Read_mainflash->FlashRead_JuYan(Wrtie_Num); 当SatNoSnr结构体是129字节(sizeof是136字节)时&#xff0c;上面一…

ZYNQ开发系列——SDK输出串口选择以及打印函数print、printf、xil_printf的差别

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 ZYNQ开发系列——SDK输出串口选择以及打印函数print、printf、xil_printf的差别 前言两个串口到底是谁在打印&#xff1f;print 和 printf 和 xil_printf 前言 在最初的hell…

MBD开发模式下的XIL仿真测试

MBD开发模式下的XIL仿真测试 “想了解MBD模式下的MIL、SIL、PIL、HIL吗&#xff1f;”——虹科 汽车从一个发动机加上几个轮子的简单形态发展到如今机械与电子高度融合的复杂整体&#xff0c;经历了巨变。汽车电子控制单元的数量和复杂度也呈几何级数增加&#xff0c;给软硬件…

SSM 三大框架原理、核心技术,运行流程讲解

作者:arrows 来源:https://www.cnblogs.com/arrows/p/10537733.html 一、Spring部分 1、 Spring的运行流程 第一步&#xff1a;加载配置文件ApplicationContext ac new ClassPathXmlApplicationContext(“beans.xml”); &#xff0c;ApplicationContext接口&#xff0c;它由…

SSM框架介绍以及功能原理

SSM是spingspringMVCmybatis集成的框架。 Spring框架概述 什么是Spring Spring是一个开源框架&#xff0c;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来…

ssm框架项目完整流程详解

springMVC项目完整流程详解 1.创建一个maven项目2.修改项目配置&#xff0c;添加tomcat&#xff0c;生成web.xml3.在pom.xml中引入需要用到的包并update project4.在resources下建立如下图所示结构&#xff0c;并创建springmvc-servlet.xml、spring-mybatis.xml、druid.propter…

SSM三大框架工作流程与原理详解

作者&#xff1a;网络笨猪 blog.csdn.net/lyfqyr/article/details/84552278 一、Spring部分 1、Spring的运行流程 第一步&#xff1a;加载配置文件ApplicationContext ac new ClassPathXmlApplicationContext("beans.xml");&#xff0c;ApplicationContext接口&…

SSM框架原理,作用及使用方法,详细解释

1、基本概念 1.1、Spring Spring是一个开源框架&#xff0c;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的…

【SSM框架执行流程】

一、单个业务执行流程&#xff1a; 1.tomcat启动: 加载应用的web.xml 2.实例化并初始化Servlet 3.加载spring.xml配置文件创建spring容器&#xff0c;根据配置初始化容器中的对象。 4.浏览器客户端发送请求&#xff0c;例如Hello() 5.请求到达前端控制器&#xff1a;Dispa…

SSM框架原理流程及使用方法

作用&#xff1a; ssm框架是spring MVC &#xff0c;spring和mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#xff0c;service层&#xff0c;DAO层四层 使用springMVC负责请求的转发和视图管理 spring实现业务…

SSM框架的整合原理以及执行流程

一、SSM框架的整合流程&#xff1a; 1 Spring与Mybatis整合 &#xff1a;关键在于spring-mybatis.xml配置文件&#xff0c;主要配置自动扫描、自动注入以及数据库等。前提是要配置好JDBC属性文件jdbc.properties. <?xml version"1.0" encoding"UTF-8"…

SSM三大框架的运行流程、原理、核心技术详解

一、Spring部分 1、Spring的运行流程 第一步&#xff1a;加载配置文件ApplicationContext ac new ClassPathXmlApplicationContext("beans.xml"); &#xff0c;ApplicationContext接口&#xff0c;它由BeanFactory接口派生而来&#xff0c;因而提供了BeanFactory所…

SSM框架整合以及运行流程

最近工作中开发的项目使用了Spring-springMVC-Mybatis框架进行开发&#xff0c;今天来总结写这段时间对SSM框架的理解。在对SSM框架整合前&#xff0c;先对框架的每层的作用以及它们之间的关系做一个简单的介绍。 一、SSM框架中各层级间的作用及关系 表现层&#xff08;sprin…

SSM框架原理及使用方法

作用&#xff1a; SSM框架是spring MVC &#xff0c;spring和mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#xff0c;service层&#xff0c;DAO层四层 使用spring MVC负责请求的转发和视图管理 spring实现业…

SSM框架运行原理

ssm框架&#xff1a;包括&#xff0c;springMVC -- spring -- mybatis springMVC 是基于MVC的框架 属于MVC框架的还有&#xff1a;Struts1 Struts2 SpringMVC 获取值得方式&#xff1a; Struts1 actionForm(javabean中继承) Struts2 通过 set get 方法 SpringMVC …

SSM框架工作原理、作用及使用方法

作用&#xff1a; SSM框架是spring MVC &#xff0c;spring和mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#xff0c;service层&#xff0c;DAO层四层 使用spring MVC负责请求的转发和视图管理 spring实现业…

SSM框架原理,作用及使用方法

作用: SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层 使用spring MVC负责请求的转发和视图管理 spring实现业务对象管理,mybatis作为数据对象的持久化引擎 原理: SpringMVC: 1.客户…

SSM框架原理以及流程简略

SSM框架原理以及流程 Spring:spring实现业务对象管理,也是各个组件的粘合剂&#xff0c;可以很好的管理各层之间的框架。 SpringMvc:负责请求的转发和视图管理,springmvc是spring的模块之一&#xff0c;所有整合的时候基本上可以实现100%零配置。 mybatis&#xff1a;作为数据…

SSM三大框架的运行流程、原理、核心技术详解!

一、Spring部分 1、Spring的运行流程 第一步&#xff1a;加载配置文件ApplicationContext ac new ClassPathXmlApplicationContext("beans.xml");&#xff0c;ApplicationContext接口&#xff0c;它由BeanFactory接口派生而来&#xff0c;因而提供了BeanFactory所…