96SEO 2026-02-19 10:34 5
。

将主流的GameFramework修改#xff0c;支持Addressable和AssetBundle#xff0c;已完善打包工具和流程。
新…GitHub:YMoonRiver/hybridclr_addressable:
开箱即用的商业游戏框架集成了主流的开发工具。
将主流的GameFramework修改支持Addressable和AssetBundle已完善打包工具和流程。
GameFramework[https://github.com/EllanJiang/GameFramework](https://github.com/EllanJiang/GameFramework)
[https://github.com/neuecc/UniRx](https://github.com/neuecc/UniRx)
[https://github.com/Cysharp/UniTask](https://github.com/Cysharp/UniTask)
DataTable为了配置修改不再动态生成或修改对应的序列化的类进行全动态的解析。
为了做到通用性解析配置表有一定的规则以Excel操作的配置表为例。
第三行为当前列的数据类型,[bool,int,long,float,double,string,Vector2,Vector3,Color],Vector2示例100,100,Color示例#F0F或者#FF00FF;
实际数据以第五行,第二列开始第二列的数据一定为int类型的唯一识别id
|#|Id|LevelSort|UIFormId|LevelName|LevelDesc|Leveldubing|IsHide|
|#|int|int|int|string|string|int|bool|
|#|关卡Id|关卡排序|界面编号|关卡名称|关卡描述|配音|是否隐藏|
||20010001|1|300|测试名称|测试说明|2352|false|
||20010002|2|200|测试名称02|测试说明02|23521|false|
GameMode.Event.AddListenerLoadDataTableEventArgs(OnLoadDataTable);
GameMode.DataTable.LoadDataTable(Assets/Game/DataTable/GameCheckpoint.txt);
Debug.Log($#################################:{ne.Message});
Debug.Log($-------------------------------------------------------);
GameMode.DataTable.GetDataTable(Assets/Game/DataTable/GameCheckpoint.txt);
IDataTable是当前配置表的所有数据的集合可使用foreach获取到数据的key值TableData是具体数据存储对象主要支持上述的第三行的基本类型。
整个框架以事件作为驱动以达到各个功能之间的解耦效果。
除了可以自定义扩展事件以外框架中还会自带一些事件后面再详细列表。
GameEventArgsSceneLoadingEventArgs
GameFrameworkMode.GetModuleEventManager().AddListenerSceneLoadingEventArgs(OnSceneLoadingCallbak);
GameFrameworkMode.GetModuleEventManager().RemoveListenerSceneLoadingEventArgs(OnSceneLoadingCallbak);
GameFrameworkMode.GetModuleEventManager()
GameFrameworkMode.GetModuleEventManager().TriggerSceneLoadingEventArgs(this);
游戏状态是整个项目的核心逻辑建议将所有的逻辑都写再状态之中。
增加状态管理几乎将各个类型的项目的开发都能尽量模式话常用的状态:版本更新状态-配置加载状态-资源预加载-开始游戏-...
增加状态所有的状态都需要继承GameState,并在类名上添加类标记[GameState]
[GameState(GameStateType.Normal)]
[GameState(GameStateType.Ignore)]
[GameState(GameStateType.Start)]
GameFrameworkMode.GetModuleResourceManager().LoadAssetTextAsset(datatable,Assets/TextAssets/test.txt);
GameFrameworkMode.GetModuleResourceManager().LoadAssetGameObject(player,Assets/Players/player.prefab);
GameFrameworkMode.GetModuleResourceManager().LoadAssetBundle(hotfix);
GameFrameworkMode.GetModuleResourceManager().LoadAssetSync(hotfix,main);
GameFrameworkMode.GetModuleResourceManager().AddPrefab(player,Assets/Prefab/Player.prefab,
GameFrameworkMode.GetModuleResourceManager().Spawn(Assets/Prefab/Player.prefab);
GameFrameworkMode.GetModuleResourceManager().Despawn(player);
GameFrameworkMode.GetModuleResourceManager().LoadSceneAsync(mainscene,Assets/Scene/Main.unity);
支持编辑器内资源的直接读取和AssetBundle资源读取两种方式的一键切换避免测试的时候需要重复的打包AssetBundle资源
新建ui预设新建ui类继承类UIView,绑定并在类名上标明预设的资源路径
[UIView(ui,Assets/Prefab/UI/LoadingView.prefab)]
System.NotImplementedException();
System.NotImplementedException();
System.NotImplementedException();
System.NotImplementedException();
GameFrameworkMode.GetModuleUIManager().PushLoadingUIView();
关闭ui,在看到pushpop的时候就知道UIManager是基于堆栈管理UI的pop自然关闭的是最新打开的界面
GameFrameworkMode.GetModuleUIManager().Pop();
数据节点只用来存储在运行中的数据,用法类似PlayerPrefs
GameFrameworkMode.GetModuleNodeManager().SetInt(Level,
GameFrameworkMode.GetModuleNodeManager().GetInt(Level);
网页请求目前主要包含读取http上的文本文件和下载http服务器上的资源到本地两大功能
GameFrameworkMode.GetModuleWebRequestManager().RequestText(http://nothing.com/AssetVersion.txt);
GameFrameworkMode.GetModuleEventManager().AddListenerHttpReadTextSuccessEventArgs(OnHttpReadTextSuccess);
GameFrameworkMode.GetModuleEventManager().AddListenerHttpReadTextFaileEventArgs(OnHttpReadTextFaile);
GameFrameworkMode.GetModuleEventManager().AddListenerDownloadSuccessEventArgs(OnDownloadSuccess);
GameFrameworkMode.GetModuleEventManager().AddListenerDownloadFaileEventArgs(OnDownloadFaile);
GameFrameworkMode.GetModuleEventManager().AddListenerDownloadProgressEventArgs(OnDownloadProgress);
统一的声音播放管理支持默认的背景音乐、ui音效、其他音效已经物体绑定的AudioSource多种模式以下以播放ui音效为例
GameFrameworkMode.GetModuleAudioManager().AddUISound(soundclip,Assets/Audio/UI/default.wav);
GameFrameworkMode.GetModuleAudioManager().PlayUISound(soundclip,Assets/Audio/UI/default.wav);
GameFrameworkMode.GetModuleAudioManager().StopUISound();
GameFrameworkMode.GetModuleAudioManager().RemoveUISound(Assets/Audio/UI/default.wav);
将配置文件中的本地化文件读取语言存为字典保存在LocalizationManager中使用LocalizationText绑定在UGUI的Text组件上。
go.GetComponentLocalizationText().TextGameName;
默认封装PlayerPrefs,使用方法类似。
同时添加了SetQualitySetAllSoundVolumeSetBackgroundMusicVolumeSetUISoundVolumeSetSoundEffectVolume等默认的设置
具体使用GameFrameworkMode.GetModuleSettingMangaer()一目了然
正在增加中首先会封装局域网内的连接通信互联网后面增加。
目前使用kcp将udp转为可靠传输传输协议使用Protobuf
打包工具兼容unity自身右下角的assetbundle的标签设计
工具栏AddressableMenu/...,一键打包一键增量打包
2020.3.33(任意后缀子版本如f1、f1c1、f1c2都可以)
版本**2019.4.x、2020.3.x、2021.3.x系列都可以但为了避免新手无谓的出错尽量使用2020.3.33版本来体验。
Packages/com.focus-creative-games/hybridclr_unity
HybridCLR为c实现只有打包后才可使用。
日常开发在编辑器下无需打包。
[快速开始](https://focus-creative-games.github.io/hybridclr/start_up/)。
进入场景后Main场景中的LoadDll会按顺序加载StreamingAssets目录下common
AssetBundle里的Assembly-Csharp.dll。
接着运行App::Main函数。
根据你所使用的Unity年度版本**还需要额外**安装2019.4.40、2020.3.33或者2021.3.1版本必须包含il2cpp模块不限
组件。
如果未安装请自行在UnityHub中安装。
新手自行google或百度。
2021版本2019、2020不需要打包iOS平台的开发者由于HybridCLR需要裁减后的AOT
Editor未提供公开接口可以复制出target为iOS时的AOT
dll故必须使用修改后的UnityEditor.CoreModule.dll覆盖Unity自带的相应文件。
HybridCLRData/ModifiedUnityAssemblies/2021.3.1/UnityEditor.CoreModule-{Win,Mac}.dll
{Editor安装有可能因为操作系统或者Unity版本而有不同。
每个Unity小版本都不相同我们目前暂时只提供了2021.3.1版本如需其他版本请自己手动制作详情请见
[修改UnityEditor.CoreModule.dll](https://focus-creative-games.github.io/hybridclr/modify_unity_dll/)
为了支持2019需要修改il2cpp生成的源码因此我们修改了2019版本的il2cpp.exe工具。
故Installer的安装过程多了一个额外步骤将
{package}/Data/ModifiedUnityAssemblies/2019.4.40/Unity.IL2CPP.dll
{package}/Data/LocalIl2CppData/il2cpp/build/deploy/net471/Unity.IL2CPP.dll
确保[com.focus-creative-games.hybridclr_unity](https://github.com/focus-creative-games/hybridclr_unity)
为了使用HybridCLR需要安装hybridclr_unity插件。
git](https://docs.unity3d.com/Manual/upm-ui-giturl.html)。
[com.focus-creative-games.hybridclr_unity](https://github.com/focus-creative-games/hybridclr_unity)
disk](https://docs.unity3d.com/Manual/upm-ui-local.html)
HybridCLRGlobalSettings.asset**
Definition形式存在的热更新模块。
不能与下面的Hotfix
以dll形式存在的热更新模块。
不能与HotUpdateAssmblyDefinitions重复指定模块。
HotUpdateAssemblyManifest.asset**
[快速上手](https://focus-creative-games.github.io/hybridclr/start_up/)
如果安装界面没有错误或者警告则说明il2cpp路径设置正常否则需要你手动选择正确的il2cpp目录
**请确保你已经掌握了常规的il2cpp为backend的打包过程**
**请确保你已经在你电脑上对于一个未使用HybrildCLR的项目成功打包出il2cpp为backend的相应包**也就是打包环境是正常的
运行Release_Win64/HybridCLRTrial.exe会看到打出
HybridCLR/BuildBundles/Win64重新生成ab
将StreamingAssets下的ab包复制到Release_Win64\HybridCLRTrial_Data\StreamingAssets。
MonoPInvokeCallbackAttribute的预留桩函数
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback