94 lines
2.6 KiB
C#
94 lines
2.6 KiB
C#
|
|
using HybridCLR;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Reflection;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.AddressableAssets;
|
|||
|
|
using UnityEngine.AddressableAssets.ResourceLocators;
|
|||
|
|
|
|||
|
|
public class Boot : SingletonBehaviour<Boot>
|
|||
|
|
{
|
|||
|
|
public AssetReferenceGameObject patchWindowRef;
|
|||
|
|
// DLL<4C><4C><EFBFBD>ã<EFBFBD>0=<3D><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>, 1=<3D>ȸ<EFBFBD><C8B8>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public Dictionary<string, int> dllMap = new Dictionary<string, int>()
|
|||
|
|
{
|
|||
|
|
{ "mscorlib", 0 },
|
|||
|
|
{ "System", 0 },
|
|||
|
|
{ "System.Core", 0 },
|
|||
|
|
{ "UnityScripts.HotUpdate", 1 },
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
void Awake()
|
|||
|
|
{
|
|||
|
|
Application.targetFrameRate = 60;
|
|||
|
|
Application.runInBackground = true;
|
|||
|
|
DontDestroyOnLoad(gameObject);
|
|||
|
|
StartCoroutine(Initialize());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IEnumerator Initialize()
|
|||
|
|
{
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC>Addressables
|
|||
|
|
var initHandle = Addressables.InitializeAsync();
|
|||
|
|
yield return initHandle;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ظ<EFBFBD><D8B8>´<EFBFBD><C2B4><EFBFBD>
|
|||
|
|
var windowHandle = patchWindowRef.LoadAssetAsync<GameObject>();
|
|||
|
|
yield return windowHandle;
|
|||
|
|
|
|||
|
|
var windowObj = Instantiate(windowHandle.Result, GameManager.Inst.MainCanvasUI.transform);
|
|||
|
|
var patchWindow = windowObj.GetComponent<PatchWindow>();
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>ص<EFBFBD>LoadDll
|
|||
|
|
patchWindow.StartCheckUpdate(() => StartCoroutine(LoadDllAndStartGame()));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IEnumerator LoadDllAndStartGame()
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLL
|
|||
|
|
foreach (var dll in dllMap)
|
|||
|
|
{
|
|||
|
|
yield return LoadSingleDll(dll.Key, dll.Value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
yield return LoadGameStart();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IEnumerator LoadSingleDll(string dllName, int dllType)
|
|||
|
|
{
|
|||
|
|
var handle = Addressables.LoadAssetAsync<TextAsset>(KeyManager.LoadDllKey(dllName));
|
|||
|
|
yield return handle;
|
|||
|
|
|
|||
|
|
if (dllType == 0)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
|||
|
|
RuntimeApi.LoadMetadataForAOTAssembly(handle.Result.bytes, HomologousImageMode.SuperSet);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
// <20>༭<EFBFBD><E0BCAD>ģʽ<C4A3><CABD>ֱ<EFBFBD>ӻ<EFBFBD>ȡ<EFBFBD>Ѽ<EFBFBD><D1BC>صij<D8B5><C4B3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
var hotUpdateAss = AppDomain.CurrentDomain.GetAssemblies()
|
|||
|
|
.First(a => a.GetName().Name == "UnityScripts.HotUpdate");
|
|||
|
|
#else
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ȸ<EFBFBD><C8B8>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
var hotUpdateAss = Assembly.Load(handle.Result.bytes);
|
|||
|
|
#endif
|
|||
|
|
Debug.Log($"<22>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD> {dllName}");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Addressables.Release(handle);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IEnumerator LoadGameStart()
|
|||
|
|
{
|
|||
|
|
var handle = Addressables.LoadAssetAsync<GameObject>(KeyManager.LoadPrefabKey("GameStart"));
|
|||
|
|
yield return handle;
|
|||
|
|
|
|||
|
|
Instantiate(handle.Result);
|
|||
|
|
Addressables.Release(handle);
|
|||
|
|
}
|
|||
|
|
}
|