Init
This commit is contained in:
94
Assets/Scripts/Runtime/Boot.cs
Normal file
94
Assets/Scripts/Runtime/Boot.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user