| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | using System;using System.Collections;using System.Collections.Generic;using System.Reflection;using UnityEngine;using UnityEditor;using System.Runtime.CompilerServices;using MonoHook;using HybridCLR.Editor.BuildProcessors;using System.IO;namespace HybridCLR.MonoHook{#if UNITY_2021_1_OR_NEWER && (UNITY_WEBGL || UNITY_WEIXINMINIGAME)    [InitializeOnLoad]    public class PatchScriptingAssembliesJsonHook    {        private static MethodHook _hook;        static PatchScriptingAssembliesJsonHook()        {            if (_hook == null)            {                Type type = typeof(UnityEditor.EditorApplication);                MethodInfo miTarget = type.GetMethod("BuildMainWindowTitle", BindingFlags.Static | BindingFlags.NonPublic);                MethodInfo miReplacement = new Func<string>(BuildMainWindowTitle).Method;                MethodInfo miProxy = new Func<string>(BuildMainWindowTitleProxy).Method;                _hook = new MethodHook(miTarget, miReplacement, miProxy);                _hook.Install();            }        }        private static string BuildMainWindowTitle()        {        var cacheDir = $"{Application.dataPath}/../Library/PlayerDataCache";        if (Directory.Exists(cacheDir))            {                foreach (var tempJsonPath in Directory.GetDirectories(cacheDir, "*", SearchOption.TopDirectoryOnly))                {                    string dirName = Path.GetFileName(tempJsonPath); #if UNITY_WEIXINMINIGAME                    if (!dirName.Contains("WeixinMiniGame"))                    {                        continue;                    }#else                    if (!dirName.Contains("WebGL"))                    {                        continue;                    }#endif                    var patcher = new PatchScriptingAssemblyList();                    patcher.PathScriptingAssembilesFile(tempJsonPath);                }            }            string newTitle = BuildMainWindowTitleProxy();            return newTitle;        }        [MethodImpl(MethodImplOptions.NoOptimization)]        private static string BuildMainWindowTitleProxy()        {            // 为满足MonoHook要求的最小代码长度而特地加入的无用填充代码,            UnityEngine.Debug.Log(12345.ToString());            return string.Empty;        }    }#endif}
 |