// // GameApp.cs // Create: // 2019-10-29 // Description: // 代码热更新服务类 // Author: // 薛林强 <545626463@qq.com> // // Copyright (c) 2026 虚幻骑士科技 using System; using System.Collections; using System.IO; using UnityEngine; using log4net.Util; using System.Collections.Generic; using System.Threading; using Skyunion; public class HotFixService_IFix : Module, IHotFixService { private Hotfix.Game mGame; #region 实现 IModule public override void Init() { CoreUtils.assetService.LoadFileAsync(Path.Combine(Application.streamingAssetsPath, "Hotfix.patch.bytes"), (rDLLBytes) => { try { if (rDLLBytes != null && rDLLBytes.Length > 0) { IFix.Core.PatchManager.Load(new MemoryStream(rDLLBytes)); } } finally { OnInitialized(); } }); } public override void AfterInit() { mGame = new Hotfix.Game(); mGame.Initialize(mPluginManager, "HotFixService_IFix"); } public override void Update() { if (mGame != null) { mGame.Update(); } } public override void Shut() { base.Shut(); if (mGame != null) { mGame.Shut(); } } #endregion 实现 IModule #region 实现 HotFixService public HotfixMode GetHotfixMode() { return HotfixMode.IFix; } public IHotfixObject Instantiate(string rTypeName, params object[] rArgs) { var rObject = new HotfixObject_IFix(rTypeName); rObject.mObject = Activator.CreateInstance(Type.GetType(rTypeName), rArgs); return rObject; } public T Instantiate(string rTypeName, params object[] rObjs) { return (T)Activator.CreateInstance(Type.GetType(rTypeName), rObjs); } public T Instantiate(Type type) { return (T)Instantiate(type); } public object Instantiate(Type type) { return Activator.CreateInstance(type); } public object Invoke(IHotfixObject rHotfixObj, string rMethodName, params object[] rArgs) { if (rHotfixObj == null) return null; return rHotfixObj.Invoke(rMethodName, rArgs); } public object InvokeParent(IHotfixObject rHotfixObj, string rParentType, string rMethodName, params object[] rArgs) { if (rHotfixObj == null) return null; return rHotfixObj.InvokeParent(rParentType, rMethodName, rArgs); } public object InvokeStatic(string rTypeName, string rMethodName, params object[] rArgs) { var rType = Type.GetType(rTypeName); var method = rType.GetMethod(rMethodName); return method.Invoke(null, rArgs); } public object GetAppdomain() { return null; } #endregion 实现 IHotFixService }