ILRuntime(3) dll을 사용하지 않고hotfix 부분 코드 실행
3009 단어 ILRuntime
일단 저희가 매거진을 하나 더 해볼게요.
public enum AssetLoadMethod
{
Editor = 0,
StreamingAsset,
}
Editor 모드를 선택하면 hotfix 로드를 건너뜁니다.dll 프로세스, 저희 Hotfix 부분 코드를 정상적으로 실행합니다.이렇게 하면 매번 수정된 후에 시작하기 전에hotfix를 한 번 칠 필요가 없다.dll 파일.
StreamingAsset 모드를 선택하면 hotfix가 로드됩니다.dll, ILRuntime을 통해Runtime.Enviorment.AppDomain에서 Hotfix 부분 코드를 실행합니다.
그리고 저희 Hotfix Launch에 판단을 추가해서 Assembly를 이용해야 합니다.모든 유형을 가져오려면 GetAssembly ()
using Hotfix.Manager;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Tool;
using UnityEngine;
namespace Hotfix
{
public class HotfixLaunch
{
static List managerList = new List();
public static void Start(bool isHotfix)
{
Debug.Log("HotfixLaunch Start");
// Hotfix.dll
List allTypes = new List();
if (isHotfix)
{
var values = ILRuntimeHelp.appdomain.LoadedTypes.Values.ToList();
foreach (var v in values)
{
allTypes.Add(v.ReflectionType);
}
}
else
{
var assembly = Assembly.GetAssembly(typeof(HotfixLaunch));
if (assembly == null)
{
Debug.LogError(" dll is null");
return;
}
allTypes = assembly.GetTypes().ToList();
}
//
allTypes = allTypes.Distinct().ToList();
// hotfix ,
......
}
그리고 우리가 시작한 클래스 런치에 위에 열거 변수를 추가한 다음 변수의 값에 따라 시작 방식을 선택하면 됩니다.
using System;
using System.Reflection;
using Tool;
using UnityEngine;
public class Launch : MonoBehaviour
{
public AssetLoadMethod ILRuntimeCodeLoadMethod;
......
private void Start()
{
if(ILRuntimeCodeLoadMethod == AssetLoadMethod.StreamingAsset)
{
StartCoroutine(ILRuntimeHelp.LoadILRuntime(OnILRuntimeInitialized));
}
else
{
// Hotfix.HotfixLaunch.Start dll Hotfix Hotfix.HotfixLaunch
var assembly = Assembly.GetExecutingAssembly();
var type = assembly.GetType("Hotfix.HotfixLaunch");
var method = type.GetMethod("Start", BindingFlags.Public | BindingFlags.Static);
method.Invoke(null, new object[] { false });
}
}
......
}
이렇게 해서 우리가 평소에 개발할 때AssetLoadMethod를 선택한다.Editor 모드에서는 자주 dll을 칠 필요가 없습니다.그러나 ILRuntime의 문법 오류가 너무 많이 쌓이는 것을 막기 위해 정기적으로 dll 테스트를 해야 한다.