ILRuntime(3) dll을 사용하지 않고hotfix 부분 코드 실행

3009 단어 ILRuntime
앞 항목에서hotfix 부분의 코드를 수정하고 실행 효과를 보려면 매번 dll 파일을 컴파일해서 실행해야 합니다.개발 과정에서 비교적 번거로울 수 있기 때문에 우리는 dll을 읽지 않고hotfix 코드를 호출해서 프로젝트를 실행할 수 있도록 옵션을 추가할 수 있다. (즉 ILRuntime 기능을 무시하는 것이다.)물론 이렇게 한 후에 개발 중인 ILRuntime의 문법 오류가 쌓이지 않도록 dll을 옳고 그름으로 컴파일해야 한다.
일단 저희가 매거진을 하나 더 해볼게요.
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 테스트를 해야 한다.

좋은 웹페이지 즐겨찾기