提交热更新

This commit is contained in:
PC-20230316NUNE\Administrator 2024-10-15 18:26:52 +08:00
parent d7e6b45f5f
commit ef1d3dfb2f
96 changed files with 9574 additions and 9554 deletions
.gitignore
JNFrame2
AimingRig.csprojAssembly-CSharp-firstpass.csprojAssembly-CSharp.csproj
Assets
AssetBundleCollectorSetting.asset
HotAssets/HotDlls
HotMain
HotResources.meta
HotResources
HotScripts.meta
HotScripts
Resources
StreamingAssets/yoo
Bundles/StandaloneWindows64
HotSamples.csprojJNFrame2.slnJNGame.Editor.csprojJNGame.csproj
Logs
Packages
ProjectSettings
SHFrame.Editor.csprojSHFrame.csprojStompyRobot.SRDebugger.Editor.csprojStompyRobot.SRDebugger.csprojStompyRobot.SRF.Editor.csprojStompyRobot.SRF.csprojUniTask.Addressables.csprojUniTask.DOTween.csprojUniTask.Editor.csprojUniTask.Linq.csprojUniTask.TextMeshPro.csprojUniTask.csproj
obj/Debug

4
.gitignore vendored

@ -64,3 +64,7 @@ out/
.DS_Store
headless/logger/
JNFrame2/HybridCLRData/
JNFrame2/Windows/
JNFrame2/yoo/
JNFrame2/Bundles/
JNFrame2/Assets/StreamingAssets/yoo/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -29,8 +29,8 @@ MonoBehaviour:
AssetTags:
ActiveRuleName: EnableGroup
Collectors:
- CollectPath: Assets/HotAssets/Resource
CollectorGUID: 73d51e542e260624aad32232794a401c
- CollectPath: Assets/HotResources
CollectorGUID: 9cf7250c4c4b62c4ea6c677e2007ec5a
CollectorType: 0
AddressRuleName: AddressByFileName
PackRuleName: PackSeparately

@ -147,7 +147,6 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 67180524}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@ -155,6 +154,7 @@ Transform:
m_Children:
- {fileID: 1371077986}
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &67180526
MonoBehaviour:
@ -254,13 +254,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 790008994}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &1371077985
GameObject:
@ -286,13 +286,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1371077985}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 67180525}
m_RootOrder: -2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1371077987
MonoBehaviour:
@ -307,11 +307,13 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_AvailableProcedureTypeNames:
- HotMain.SHGame.Procedure.ProcedureInitializePackage
- HotMain.SHGame.Procedure.ProcedureLoadHot
- HotMain.SHGame.Procedure.ProcedureLoadLauncher
- Plugins.SHFrame.SHGame.Procedure.ProcedureInitializePackage
- Plugins.SHFrame.SHGame.Procedure.ProcedureUpdatePackageManifest
- Plugins.SHFrame.SHGame.Procedure.ProcedureUpdatePackageVersion
m_EntranceProcedureTypeName: Plugins.SHFrame.SHGame.Procedure.ProcedureInitializePackage
- HotMain.SHGame.Procedure.ProcedurePackageDownloader
- HotMain.SHGame.Procedure.ProcedureUpdatePackageManifest
- HotMain.SHGame.Procedure.ProcedureUpdatePackageVersion
m_EntranceProcedureTypeName: HotMain.SHGame.Procedure.ProcedureInitializePackage
--- !u!1 &1371947665
GameObject:
m_ObjectHideFlags: 0
@ -396,18 +398,11 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1371947665}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1371947668}
- {fileID: 790008996}
- {fileID: 67180525}

@ -1,13 +1,11 @@
using System.IO;
using Cysharp.Threading.Tasks;
using Plugins.SHFrame.SHGame.YooAsset;
using Cysharp.Threading.Tasks;
using HotMain.SHGame.YooAsset;
using HotMain.SHGame.YooAsset.StreamingAssetsHelper;
using SHFrame;
using SHFrame.FSM;
using UnityEditor;
using UnityEngine;
using YooAsset;
namespace Plugins.SHFrame.SHGame.Procedure
namespace HotMain.SHGame.Procedure
{
/// <summary>
/// 初始化资源包
@ -15,7 +13,7 @@ namespace Plugins.SHFrame.SHGame.Procedure
public class ProcedureInitializePackage : ProcedureBase
{
public static EPlayMode PlayMode = EPlayMode.OfflinePlayMode;
public static EPlayMode PlayMode = EPlayMode.HostPlayMode;
public static string RawFilePackageName = "RawFilePackage";
public static string DefaultPackageName = "DefaultPackage";
@ -23,6 +21,7 @@ namespace Plugins.SHFrame.SHGame.Procedure
//热更新的dll名称
public static readonly string[] HotDllName =
{
"HotSamples.dll"
};
public static readonly string[] AotMetaAssemblyFiles =
@ -85,13 +84,14 @@ namespace Plugins.SHFrame.SHGame.Procedure
initOperation = package.InitializeAsync(initParametersOfflinePlayMode);
break;
case EPlayMode.HostPlayMode:
// //联机运行模式
// var initParametersHostPlayMode = new HostPlayModeParameters
// {
// BuildinQueryServices = new GameQueryServices(),
// RemoteServices = new RemoteServices(GetHostServerURL(packageName), GetHostServerURL(packageName))
// };
// initOperation = package.InitializeAsync(initParametersHostPlayMode);
//联机运行模式
// 注意GameQueryServices.cs 太空战机的脚本类详细见StreamingAssetsHelper.cs
string HostServer = $"http://ngame.jisol.cn/JNGame2/{packageName}";
var createParameters = new HostPlayModeParameters();
createParameters.DecryptionServices = new FileStreamDecryption();
createParameters.BuildinQueryServices = new GameQueryServices();
createParameters.RemoteServices = new RemoteServices(HostServer, HostServer);
initOperation = package.InitializeAsync(createParameters);
break;
}

@ -0,0 +1,59 @@
using System.Reflection;
using Cysharp.Threading.Tasks;
using SHFrame;
using UnityEngine;
using YooAsset;
namespace HotMain.SHGame.Procedure
{
public class ProcedureLoadHot : ProcedureBase
{
protected override void OnEnter(SHFrame.FSM.IFsm<IProcedureManager> procedureOwner)
{
base.OnEnter(procedureOwner);
MainLoad(procedureOwner).Forget();
}
private async UniTask MainLoad(SHFrame.FSM.IFsm<IProcedureManager> procedureOwner)
{
// 加载热更dll
foreach (var name in ProcedureInitializePackage.HotDllName)
{
await LoadHotfixDll(ProcedureInitializePackage.RawFilePackageName, name);
}
// 实例化热更新入口 执行游戏初始化配置表初始化、UI模块初始化、获取玩家数据之类的操作
ResourcePackage package = YooAssets.GetPackage(ProcedureInitializePackage.DefaultPackageName);
var go = await LoadGameObject(package, "HotPrefab");
go.name = $"Resource_{package.GetPackageVersion()}_{YooAssets.GetPackage(ProcedureInitializePackage.RawFilePackageName).GetPackageVersion()}";
Log.Warning($"Prefab name is {go.name}");
}
public static async UniTask<Assembly> LoadHotfixDll(string packageName, string name)
{
Log.Warning($"加载热更dll{name}");
var package = YooAssets.GetPackage(packageName);
var handle = package.LoadRawFileAsync(name);
await handle.ToUniTask();
var dllBytes = handle.GetRawFileData();
var assembly = Assembly.Load(dllBytes);
Log.Warning($"加载热更dll完成{name}");
return assembly;
}
/// <summary>
/// 异步加载GameObject
/// </summary>
/// <param name="package"></param>
/// <param name="assetNames">YooAsset中打包的资源名称</param>
/// <returns>返回GameObject</returns>
public static async UniTask<GameObject> LoadGameObject(ResourcePackage package, string assetNames)
{
var handle = package.LoadAssetAsync<GameObject>(assetNames);
await handle.ToUniTask();
return handle.InstantiateSync();
}
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4dc4cea51e784614969d04772ebdfc68
timeCreated: 1728975475

@ -3,7 +3,6 @@ using System.Linq;
using System.Reflection;
using Cysharp.Threading.Tasks;
using HybridCLR;
using Plugins.SHFrame.SHGame.Procedure;
using SHFrame;
using SHFrame.FSM;
using YooAsset;
@ -25,6 +24,8 @@ namespace HotMain.SHGame.Procedure
// 打包时内置在包体内的资源 直接先使用包体资源,实例化 登录加载界面后,再去检查是否需要下载更新
//加载AOT
await LoadMetadataForAOTAssemblies();
//切换到更新资源版本
ChangeState<ProcedurePackageDownloader>(procedureOwner);
}

@ -0,0 +1,194 @@
using Cysharp.Threading.Tasks;
using SHFrame;
using SHFrame.FSM;
using YooAsset;
namespace HotMain.SHGame.Procedure
{
public class ProcedurePackageDownloader : ProcedureBase
{
private int launcherPatchCount = 0;
private int totalDownloadCount = 0;
private long totalDownloadBytes = 0;
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
{
base.OnEnter(procedureOwner);
launcherPatchCount = 0;
totalDownloadCount = 0;
totalDownloadBytes = 0;
Download(procedureOwner);
}
private async void Download(IFsm<IProcedureManager> procedureOwner)
{
// //检查launcher标签的资源
// launcherPatchCount += TryGetTagPatchCount(ProcedureInitializePackage.RawFilePackageName, YooTag.LAUNCHER);
// launcherPatchCount += TryGetTagPatchCount(ProcedureInitializePackage.DefaultPackageName, YooTag.LAUNCHER);
//
// if (launcherPatchCount > 0)
// {
// Log.Warning("launcher资源需要更新下载完成后需要重启游戏");
// totalDownloadCount += launcherPatchCount;
// }
// 完全通过远端获取的资源,每次启动游戏都检查是否需要更新
//TODO 把这个玩意拆分成 1、获取下载文件大小2、提示总的下载大小提示确认3、开始下载
ResourcePackage rawFilePackage = YooAssets.GetPackage(ProcedureInitializePackage.RawFilePackageName);
totalDownloadBytes += TryDownloadPatch(rawFilePackage);
ResourcePackage defaultPackage = YooAssets.GetPackage(ProcedureInitializePackage.DefaultPackageName);
totalDownloadBytes += TryDownloadPatch(defaultPackage);
if (totalDownloadCount > 0 || totalDownloadBytes > 0)
{
Log.Warning("开始下载资源");
//进行下载
var result = await GetDownload(rawFilePackage);
if (!result) return;
//进行下载
result = await GetDownload(defaultPackage);
if (!result) return;
//判断launcher资源是否有更新有就弹窗重启游戏
if (launcherPatchCount > 0)
{
Log.Warning("launcher资源有更新需要重启游戏");
return;
}
// 资源下载完毕
Log.Warning("资源下载完毕");
}
else
{
Log.Warning("没有资源需要更新");
}
//切换到加载热更包入口
ChangeState<ProcedureLoadHot>(procedureOwner);
}
private int TryGetTagPatchCount(string packageName, string tag)
{
ResourcePackage package = YooAssets.GetPackage(packageName);
//4.下载补丁包信息,反馈到弹窗
var downloader = package.CreateResourceDownloader(tag, 10, 3, 60);
//没有需要下载的资源
if (downloader.TotalDownloadCount == 0)
{
Log.Warning($"{package.PackageName} tag {tag} 没有资源更新");
return 0;
}
//需要下载的文件总数和总大小
Log.Warning($"{package.PackageName} tag {tag} 文件总数:{downloader.TotalDownloadCount}:::总大小:{downloader.TotalDownloadBytes}");
return totalDownloadCount;
}
/// <summary>
///
/// </summary>
/// <param name="package"></param>
private long TryDownloadPatch(ResourcePackage package)
{
//4.下载补丁包信息,反馈到弹窗
var downloader = package.CreateResourceDownloader(10, 3, 60);
//没有需要下载的资源
if (downloader.TotalDownloadCount == 0)
{
Log.Warning($"{package.PackageName} all 没有资源更新");
return 0;
}
totalDownloadCount++;
//需要下载的文件总数和总大小
Log.Warning($"{package.PackageName} 文件总数:{downloader.TotalDownloadCount}:::总大小:{downloader.TotalDownloadBytes}");
return downloader.TotalDownloadBytes;
}
private async UniTask<bool> GetDownload(ResourcePackage package)
{
var downloader = package.CreateResourceDownloader(10, 3, 60);
//注册回调方法
downloader.OnDownloadErrorCallback = OnDownloadErrorFunction;
downloader.OnDownloadProgressCallback = OnDownloadProgressUpdateFunction;
downloader.OnDownloadOverCallback = OnDownloadOverFunction;
downloader.OnStartDownloadFileCallback = OnStartDownloadFileFunction;
//开启下载
downloader.BeginDownload();
await downloader.ToUniTask();
//检测下载结果
if (downloader.Status == EOperationStatus.Succeed)
{
Log.Debug("更新完成!");
return true;
}
else
{
//下载失败
Log.Error("更新失败!");
return false;
}
}
#region yooasset下载回调函数
/// <summary>
/// 下载数据大小
/// </summary>
/// <param name="fileName"></param>
/// <param name="sizeBytes"></param>
/// <exception cref="NotImplementedException"></exception>
private void OnStartDownloadFileFunction(string fileName, long sizeBytes)
{
Log.Debug($"开始下载:文件名:{fileName}, 文件大小:{sizeBytes}");
}
/// <summary>
/// 下载完成与否
/// </summary>
/// <param name="isSucceed"></param>
/// <exception cref="NotImplementedException"></exception>
private void OnDownloadOverFunction(bool isSucceed)
{
Log.Debug("下载" + (isSucceed ? "成功" : "失败"));
}
/// <summary>
/// 更新中
/// </summary>
/// <param name="totalCount"></param>
/// <param name="currentCount"></param>
/// <param name="totalBytes"></param>
/// <param name="currentBytes"></param>
/// <exception cref="NotImplementedException"></exception>
private void OnDownloadProgressUpdateFunction(int totalCount, int currentCount, long totalBytes, long currentBytes)
{
Log.Debug($"文件总数:{totalCount}, 已下载文件数:{currentCount}, 下载总大小:{totalBytes}, 已下载大小:{currentBytes}");
}
/// <summary>
/// 下载出错
/// </summary>
/// <param name="fileName"></param>
/// <param name="error"></param>
/// <exception cref="NotImplementedException"></exception>
private void OnDownloadErrorFunction(string fileName, string error)
{
Log.Error($"下载出错:文件名:{fileName}, 错误信息:{error}");
}
#endregion
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 883e7ebff2f7432f94ecd48ae94a925a
timeCreated: 1728963960

@ -3,7 +3,7 @@ using SHFrame;
using SHFrame.FSM;
using YooAsset;
namespace Plugins.SHFrame.SHGame.Procedure
namespace HotMain.SHGame.Procedure
{
/// <summary>
/// 更新资源清单

@ -1,10 +1,9 @@
using Cysharp.Threading.Tasks;
using HotMain.SHGame.Procedure;
using SHFrame;
using SHFrame.FSM;
using YooAsset;
namespace Plugins.SHFrame.SHGame.Procedure
namespace HotMain.SHGame.Procedure
{
/// <summary>
/// 更新资源版本号

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d11821e0e1c8454f95b48b4de4f9d509
timeCreated: 1728983038

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace HotMain.SHGame.YooAsset.StreamingAssetsHelper
{
/// <summary>
/// 内置资源清单
/// </summary>
public class BuildinFileManifest : ScriptableObject
{
[Serializable]
public class Element
{
public string PackageName;
public string FileName;
public string FileCRC32;
}
public List<Element> BuildinFiles = new List<Element>();
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 71b02dfa7aa9d4545b3417a18477fbee
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,11 @@

namespace HotMain.SHGame.YooAsset.StreamingAssetsHelper
{
public class StreamingAssetsDefine
{
/// <summary>
/// 根目录名称保持和YooAssets资源系统一致
/// </summary>
public const string RootFolderName = "yoo";
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7e44d691f47abe34e9deb9cb309074f4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,165 @@
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using YooAsset;
namespace HotMain.SHGame.YooAsset.StreamingAssetsHelper
{
/// <summary>
/// 资源文件查询服务类
/// </summary>
public class GameQueryServices : IBuildinQueryServices
{
/// <summary>
/// 查询内置文件的时候,是否比对文件哈希值
/// </summary>
public static bool CompareFileCRC = false;
public bool Query(string packageName, string fileName, string fileCRC)
{
// 注意fileName包含文件格式
return StreamingAssetsHelper.FileExists(packageName, fileName, fileCRC);
}
}
#if UNITY_EDITOR
public sealed class StreamingAssetsHelper
{
public static void Init() { }
public static bool FileExists(string packageName, string fileName, string fileCRC)
{
string filePath = Path.Combine(Application.streamingAssetsPath, StreamingAssetsDefine.RootFolderName, packageName, fileName);
if (File.Exists(filePath))
{
if (GameQueryServices.CompareFileCRC)
{
string crc32 = HashUtility.FileCRC32(filePath);
return crc32 == fileCRC;
}
else
{
return true;
}
}
else
{
return false;
}
}
}
#else
public sealed class StreamingAssetsHelper
{
private class PackageQuery
{
public readonly Dictionary<string, BuildinFileManifest.Element> Elements = new Dictionary<string, BuildinFileManifest.Element>(1000);
}
private static bool _isInit = false;
private static readonly Dictionary<string, PackageQuery> _packages = new Dictionary<string, PackageQuery>(10);
/// <summary>
/// 初始化
/// </summary>
public static void Init()
{
if (_isInit == false)
{
_isInit = true;
var manifest = Resources.Load<BuildinFileManifest>("BuildinFileManifest");
if (manifest != null)
{
foreach (var element in manifest.BuildinFiles)
{
if (_packages.TryGetValue(element.PackageName, out PackageQuery package) == false)
{
package = new PackageQuery();
_packages.Add(element.PackageName, package);
}
package.Elements.Add(element.FileName, element);
}
}
}
}
/// <summary>
/// 内置文件查询方法
/// </summary>
public static bool FileExists(string packageName, string fileName, string fileCRC32)
{
if (_isInit == false)
Init();
if (_packages.TryGetValue(packageName, out PackageQuery package) == false)
return false;
if (package.Elements.TryGetValue(fileName, out var element) == false)
return false;
if (GameQueryServices.CompareFileCRC)
{
return element.FileCRC32 == fileCRC32;
}
else
{
return true;
}
}
}
#endif
#if UNITY_EDITOR
internal class PreprocessBuild : UnityEditor.Build.IPreprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }
/// <summary>
/// 在构建应用程序前处理
/// 原理在构建APP之前搜索StreamingAssets目录下的所有资源文件然后将这些文件信息写入内置清单内置清单存储在Resources文件夹下。
/// </summary>
public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
{
string saveFilePath = "Assets/Resources/BuildinFileManifest.asset";
if (File.Exists(saveFilePath))
{
File.Delete(saveFilePath);
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
}
string folderPath = $"{Application.dataPath}/StreamingAssets/{StreamingAssetsDefine.RootFolderName}";
DirectoryInfo root = new DirectoryInfo(folderPath);
if (root.Exists == false)
{
Debug.LogWarning($"没有发现YooAsset内置目录 : {folderPath}");
return;
}
var manifest = ScriptableObject.CreateInstance<BuildinFileManifest>();
FileInfo[] files = root.GetFiles("*", SearchOption.AllDirectories);
foreach (var fileInfo in files)
{
if (fileInfo.Extension == ".meta")
continue;
if (fileInfo.Name.StartsWith("PackageManifest_"))
continue;
BuildinFileManifest.Element element = new BuildinFileManifest.Element();
element.PackageName = fileInfo.Directory.Name;
element.FileCRC32 = HashUtility.FileCRC32(fileInfo.FullName);
element.FileName = fileInfo.Name;
manifest.BuildinFiles.Add(element);
}
if (Directory.Exists("Assets/Resources") == false)
Directory.CreateDirectory("Assets/Resources");
UnityEditor.AssetDatabase.CreateAsset(manifest, saveFilePath);
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
Debug.Log($"一共{manifest.BuildinFiles.Count}个内置文件,内置资源清单保存成功 : {saveFilePath}");
}
}
#endif
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ca0617f5ec2b4504b923e3205dc77f54
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -2,7 +2,7 @@
using UnityEngine;
using YooAsset;
namespace Plugins.SHFrame.SHGame.YooAsset
namespace HotMain.SHGame.YooAsset
{
public class RemoteServices : IRemoteServices
{
@ -17,12 +17,12 @@ namespace Plugins.SHFrame.SHGame.YooAsset
public string GetRemoteMainURL(string fileName)
{
return defaultHostServer;
return $"{defaultHostServer}/{fileName}";
}
public string GetRemoteFallbackURL(string fileName)
{
return fallbackHostServer;
return $"{fallbackHostServer}/{fileName}";
}
}

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 73d51e542e260624aad32232794a401c
guid: 9cf7250c4c4b62c4ea6c677e2007ec5a
folderAsset: yes
DefaultImporter:
externalObjects: {}

@ -1,5 +1,6 @@
fileFormatVersion: 2
guid: 1bc927fe3c11b0e4db2d275b2c6eda4d
guid: 35d982e86da74af4e95e0c2607885eb0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:

@ -4,6 +4,6 @@ public class InstantiateByAsset : MonoBehaviour
{
void Start()
{
Debug.Log("原始代码");
Debug.Log("原始代码3333");
}
}

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 71b02dfa7aa9d4545b3417a18477fbee, type: 3}
m_Name: BuildinFileManifest
m_EditorClassIdentifier:
BuildinFiles:
- PackageName: DefaultPackage
FileName: 6e7621677213f3254dc11b107c126e0a.bundle
FileCRC32: 3d3f3578
- PackageName: DefaultPackage
FileName: f0f60c08cc10dcb0e6c45442757414a3.bundle
FileCRC32: 56c2192b
- PackageName: RawFilePackage
FileName: 3323855830799371855418d404b9d19f.rawfile
FileCRC32: 5b90ef0a
- PackageName: RawFilePackage
FileName: 3f402809b2ac18568ce38504dca9b93e.rawfile
FileCRC32: c9fffdca
- PackageName: RawFilePackage
FileName: 570a7c285a3c681be978ebe1bef253e6.rawfile
FileCRC32: d8b11dcf
- PackageName: RawFilePackage
FileName: 7f16fde6c75d6666fe6c473bc200574a.rawfile
FileCRC32: 8fdcce3d

@ -1,7 +1,8 @@
fileFormatVersion: 2
guid: 253946b296feb0943a18d893c2ed3e16
DefaultImporter:
guid: f158672a438d7024c82155e424606457
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: dd16eaf198793c848b9a014724c43280
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 465ede1251ba0bd47aac80dd35883eec
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 5d8da02feee275e44b1830c325be6c92
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 452e5bfcc5b1540499a40f24643eae55
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: c5992a68cbdfc984c9bdc6f48639d1bc
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 87a1fb271c7f63a46ac4c113f9225de5
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: a9674dff3d6102349a3c38405d57135f
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,124 +0,0 @@
{
"Summary": {
"YooVersion": "2.1.2",
"UnityVersion": "2022.3.16f1c1",
"BuildDate": "2024/10/15 2:12:01",
"BuildSeconds": 0,
"BuildTarget": 19,
"BuildMode": 0,
"BuildPipeline": "RawFileBuildPipeline",
"BuildPackageName": "RawFilePackage",
"BuildPackageVersion": "2024-10-15-131",
"UniqueBundleName": true,
"EnableAddressable": true,
"LocationToLower": false,
"IncludeAssetGUID": false,
"AutoCollectShaders": true,
"IgnoreRuleName": "YooAsset.Editor.RawFileIgnoreRule",
"EnableSharePackRule": false,
"EncryptionClassName": "null",
"FileNameStyle": 0,
"CompressOption": 0,
"DisableWriteTypeTree": false,
"IgnoreTypeTreeChanges": false,
"AssetFileTotalCount": 4,
"MainAssetTotalCount": 4,
"AllBundleTotalCount": 4,
"AllBundleTotalSize": 3687424,
"EncryptedBundleTotalCount": 0,
"EncryptedBundleTotalSize": 0
},
"AssetInfos": [
{
"Address": "HotSamples.dll",
"AssetPath": "Assets/HotAssets/HotDlls/HotSamples.dll.bytes",
"AssetGUID": "31ecfccf5f58fcd4e82c0039b5c0433e",
"AssetTags": [],
"MainBundleName": "rawfilepackage_assets_hotassets_hotdlls_hotsamples_dll_bytes.rawfile",
"MainBundleSize": 7168,
"DependAssets": []
},
{
"Address": "mscorlib.dll",
"AssetPath": "Assets/HotAssets/HotDlls/mscorlib.dll.bytes",
"AssetGUID": "c4f581dc739cf6048af0a89b137378bc",
"AssetTags": [],
"MainBundleName": "rawfilepackage_assets_hotassets_hotdlls_mscorlib_dll_bytes.rawfile",
"MainBundleSize": 2355200,
"DependAssets": []
},
{
"Address": "System.Core.dll",
"AssetPath": "Assets/HotAssets/HotDlls/System.Core.dll.bytes",
"AssetGUID": "1025cdbe997285647b72636669abf317",
"AssetTags": [],
"MainBundleName": "rawfilepackage_assets_hotassets_hotdlls_system_core_dll_bytes.rawfile",
"MainBundleSize": 419328,
"DependAssets": []
},
{
"Address": "System.dll",
"AssetPath": "Assets/HotAssets/HotDlls/System.dll.bytes",
"AssetGUID": "946433c0616922f408bd60ce93af2f95",
"AssetTags": [],
"MainBundleName": "rawfilepackage_assets_hotassets_hotdlls_system_dll_bytes.rawfile",
"MainBundleSize": 905728,
"DependAssets": []
}
],
"BundleInfos": [
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_hotsamples_dll_bytes.rawfile",
"FileName": "79fed19d1f8259b979898e24fa6f6bfb.rawfile",
"FileHash": "79fed19d1f8259b979898e24fa6f6bfb",
"FileCRC": "7132ef21",
"FileSize": 7168,
"Encrypted": false,
"Tags": [],
"DependBundles": [],
"AllBuiltinAssets": [
"Assets/HotAssets/HotDlls/HotSamples.dll.bytes"
]
},
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_mscorlib_dll_bytes.rawfile",
"FileName": "35a3cb8929f188fd948a376f07dc7189.rawfile",
"FileHash": "35a3cb8929f188fd948a376f07dc7189",
"FileCRC": "fe7a5889",
"FileSize": 2355200,
"Encrypted": false,
"Tags": [],
"DependBundles": [],
"AllBuiltinAssets": [
"Assets/HotAssets/HotDlls/mscorlib.dll.bytes"
]
},
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_system_core_dll_bytes.rawfile",
"FileName": "20cb526248ed8fbc2a222e07849f4c64.rawfile",
"FileHash": "20cb526248ed8fbc2a222e07849f4c64",
"FileCRC": "dd111a87",
"FileSize": 419328,
"Encrypted": false,
"Tags": [],
"DependBundles": [],
"AllBuiltinAssets": [
"Assets/HotAssets/HotDlls/System.Core.dll.bytes"
]
},
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_system_dll_bytes.rawfile",
"FileName": "4e1f435ea2f1bfd9b23da97f5b2e2e63.rawfile",
"FileHash": "4e1f435ea2f1bfd9b23da97f5b2e2e63",
"FileCRC": "d5eb900b",
"FileSize": 905728,
"Encrypted": false,
"Tags": [],
"DependBundles": [],
"AllBuiltinAssets": [
"Assets/HotAssets/HotDlls/System.dll.bytes"
]
}
],
"IndependAssets": []
}

@ -1,82 +0,0 @@
{
"FileVersion": "2.0.0",
"EnableAddressable": true,
"LocationToLower": false,
"IncludeAssetGUID": false,
"OutputNameStyle": 0,
"BuildPipeline": "RawFileBuildPipeline",
"PackageName": "RawFilePackage",
"PackageVersion": "2024-10-15-131",
"AssetList": [
{
"Address": "HotSamples.dll",
"AssetPath": "Assets/HotAssets/HotDlls/HotSamples.dll.bytes",
"AssetGUID": "",
"AssetTags": [],
"BundleID": 0
},
{
"Address": "mscorlib.dll",
"AssetPath": "Assets/HotAssets/HotDlls/mscorlib.dll.bytes",
"AssetGUID": "",
"AssetTags": [],
"BundleID": 1
},
{
"Address": "System.Core.dll",
"AssetPath": "Assets/HotAssets/HotDlls/System.Core.dll.bytes",
"AssetGUID": "",
"AssetTags": [],
"BundleID": 2
},
{
"Address": "System.dll",
"AssetPath": "Assets/HotAssets/HotDlls/System.dll.bytes",
"AssetGUID": "",
"AssetTags": [],
"BundleID": 3
}
],
"BundleList": [
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_hotsamples_dll_bytes.rawfile",
"UnityCRC": 0,
"FileHash": "79fed19d1f8259b979898e24fa6f6bfb",
"FileCRC": "7132ef21",
"FileSize": 7168,
"Encrypted": false,
"Tags": [],
"DependIDs": []
},
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_mscorlib_dll_bytes.rawfile",
"UnityCRC": 0,
"FileHash": "35a3cb8929f188fd948a376f07dc7189",
"FileCRC": "fe7a5889",
"FileSize": 2355200,
"Encrypted": false,
"Tags": [],
"DependIDs": []
},
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_system_core_dll_bytes.rawfile",
"UnityCRC": 0,
"FileHash": "20cb526248ed8fbc2a222e07849f4c64",
"FileCRC": "dd111a87",
"FileSize": 419328,
"Encrypted": false,
"Tags": [],
"DependIDs": []
},
{
"BundleName": "rawfilepackage_assets_hotassets_hotdlls_system_dll_bytes.rawfile",
"UnityCRC": 0,
"FileHash": "4e1f435ea2f1bfd9b23da97f5b2e2e63",
"FileCRC": "d5eb900b",
"FileSize": 905728,
"Encrypted": false,
"Tags": [],
"DependIDs": []
}
]
}

File diff suppressed because it is too large Load Diff

@ -29,12 +29,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.Addressables", "Uni
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.TextMeshPro", "UniTask.TextMeshPro.csproj", "{023a0336-4680-7ca2-9149-a72dd59bbaf2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotSamples", "HotSamples.csproj", "{d19923e9-71a3-f5e1-00b9-865a2997ed43}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AimingRig", "AimingRig.csproj", "{7e65388c-f6a7-49e7-107c-67d307ad886b}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.DOTween", "UniTask.DOTween.csproj", "{694241c5-b793-03a0-1887-6d1b1abd5716}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotSamples", "HotSamples.csproj", "{d19923e9-71a3-f5e1-00b9-865a2997ed43}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.Editor", "UniTask.Editor.csproj", "{c9c9cf10-826e-692f-c3d6-a70ff9e1c4a0}"
EndProject
Global
@ -70,12 +70,12 @@ Global
{928a2a75-dd5e-391a-39b4-3b93706f64ec}.Debug|Any CPU.Build.0 = Debug|Any CPU
{023a0336-4680-7ca2-9149-a72dd59bbaf2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{023a0336-4680-7ca2-9149-a72dd59bbaf2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{d19923e9-71a3-f5e1-00b9-865a2997ed43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{d19923e9-71a3-f5e1-00b9-865a2997ed43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7e65388c-f6a7-49e7-107c-67d307ad886b}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7e65388c-f6a7-49e7-107c-67d307ad886b}.Debug|Any CPU.Build.0 = Debug|Any CPU
{694241c5-b793-03a0-1887-6d1b1abd5716}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{694241c5-b793-03a0-1887-6d1b1abd5716}.Debug|Any CPU.Build.0 = Debug|Any CPU
{d19923e9-71a3-f5e1-00b9-865a2997ed43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{d19923e9-71a3-f5e1-00b9-865a2997ed43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{c9c9cf10-826e-692f-c3d6-a70ff9e1c4a0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{c9c9cf10-826e-692f-c3d6-a70ff9e1c4a0}.Debug|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,3 @@
Base path: 'D:/Unity/2022.3.1f1/Editor/Data', plugins path 'D:/Unity/2022.3.1f1/Editor/Data/PlaybackEngines'
Cmd: initializeCompiler

@ -1,3 +1,3 @@
Base path: 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data', plugins path 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/PlaybackEngines'
Base path: 'D:/Unity/2022.3.1f1/Editor/Data', plugins path 'D:/Unity/2022.3.1f1/Editor/Data/PlaybackEngines'
Cmd: initializeCompiler

@ -26,7 +26,7 @@
"dependencies": {
"com.unity.modules.ai": "1.0.0"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.cinemachine": {
"version": "2.10.1",
@ -35,41 +35,41 @@
"dependencies": {
"com.unity.test-framework": "1.1.31"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.collab-proxy": {
"version": "2.2.0",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.editorcoroutines": {
"version": "1.0.0",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.ext.nunit": {
"version": "1.0.6",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.feature.development": {
"version": "1.0.1",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.ide.visualstudio": "2.0.22",
"com.unity.ide.rider": "3.0.27",
"com.unity.ide.visualstudio": "2.0.18",
"com.unity.ide.rider": "3.0.21",
"com.unity.ide.vscode": "1.2.5",
"com.unity.editorcoroutines": "1.0.0",
"com.unity.performance.profile-analyzer": "1.2.2",
"com.unity.test-framework": "1.1.33",
"com.unity.testtools.codecoverage": "1.2.4"
"com.unity.testtools.codecoverage": "1.2.3"
}
},
"com.unity.ide.rider": {
@ -79,7 +79,7 @@
"dependencies": {
"com.unity.ext.nunit": "1.0.6"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.ide.visualstudio": {
"version": "2.0.22",
@ -88,35 +88,35 @@
"dependencies": {
"com.unity.test-framework": "1.1.9"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.ide.vscode": {
"version": "1.2.5",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.performance.profile-analyzer": {
"version": "1.2.2",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.scriptablebuildpipeline": {
"version": "2.1.3",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.settings-manager": {
"version": "2.0.1",
"depth": 2,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.test-framework": {
"version": "1.1.33",
@ -127,17 +127,17 @@
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.testtools.codecoverage": {
"version": "1.2.4",
"version": "1.2.3",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.test-framework": "1.0.16",
"com.unity.settings-manager": "1.0.1"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.textmeshpro": {
"version": "3.0.6",
@ -146,19 +146,19 @@
"dependencies": {
"com.unity.ugui": "1.0.0"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.timeline": {
"version": "1.7.6",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.director": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.ugui": {
"version": "1.0.0",
@ -177,7 +177,7 @@
"com.unity.ugui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
},
"url": "https://packages.unity.cn"
"url": "https://packages.unity.com"
},
"com.unity.modules.ai": {
"version": "1.0.0",

@ -21,7 +21,7 @@ MonoBehaviour:
m_Registries:
- m_Id: main
m_Name:
m_Url: https://packages.unity.cn
m_Url: https://packages.unity.com
m_Scopes: []
m_IsDefault: 1
m_Capabilities: 7
@ -39,6 +39,6 @@ MonoBehaviour:
m_RegistryInfoDraft:
m_Modified: 0
m_ErrorMessage:
m_UserModificationsInstanceId: -838
m_OriginalInstanceId: -842
m_UserModificationsInstanceId: -834
m_OriginalInstanceId: -838
m_LoadAssets: 0

@ -1,2 +1,2 @@
m_EditorVersion: 2022.3.16f1c1
m_EditorVersionWithRevision: 2022.3.16f1c1 (2f3f1b3bde89)
m_EditorVersion: 2022.3.1f1
m_EditorVersionWithRevision: 2022.3.1f1 (f18e0c1b5784)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff