From a52399112dcc95b8df86fc66a9d5e7caf61c4d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Wed, 5 Nov 2025 19:32:22 +0800 Subject: [PATCH] 1 --- .../Assets/Art/Atlas/Atlas_bg.spriteatlasv2 | 1 + .../Assets/Art/Atlas/Atlas_icon.spriteatlasv2 | 1 - Client/Assets/Scenes/Desingn.unity | 93 +++++++++++----- .../Scripts/Hotfix/GameLogic/TestMono.cs | 49 +++++---- .../PatchUpdater/ProcedureLoadAssembly.cs | 22 +++- Client/Assets/Test/GameLogic.dll.bytes | Bin 56832 -> 56832 bytes Client/Assets/Test/GameLogic.pdb.bytes | Bin 31704 -> 31916 bytes .../com.alicizax.unity.editor.extension | 2 +- .../com.alicizax.unity.tuyoogame.yooasset | 2 +- .../Packages/com.alicizax.unity.ui.extension | 2 +- Client/UserSettings/Layouts/default-6000.dwlt | 101 ++++++++---------- 11 files changed, 154 insertions(+), 119 deletions(-) diff --git a/Client/Assets/Art/Atlas/Atlas_bg.spriteatlasv2 b/Client/Assets/Art/Atlas/Atlas_bg.spriteatlasv2 index 83b8534..15ac152 100644 --- a/Client/Assets/Art/Atlas/Atlas_bg.spriteatlasv2 +++ b/Client/Assets/Art/Atlas/Atlas_bg.spriteatlasv2 @@ -18,5 +18,6 @@ SpriteAtlasAsset: - {fileID: 21300000, guid: c85435c2e44fba84aa4be72463b4848a, type: 3} - {fileID: 21300000, guid: 7e8d3e1227cf0e349b1ec2314405ece9, type: 3} - {fileID: 21300000, guid: f1a9b3e844ba0514bb068e4586261e57, type: 3} + - {fileID: 21300000, guid: 6869fc80122cb044baa3653a39fb5ef7, type: 3} m_IsVariant: 0 m_ScriptablePacker: {fileID: 0} diff --git a/Client/Assets/Art/Atlas/Atlas_icon.spriteatlasv2 b/Client/Assets/Art/Atlas/Atlas_icon.spriteatlasv2 index 6a6d863..4f9a62d 100644 --- a/Client/Assets/Art/Atlas/Atlas_icon.spriteatlasv2 +++ b/Client/Assets/Art/Atlas/Atlas_icon.spriteatlasv2 @@ -11,7 +11,6 @@ SpriteAtlasAsset: m_MasterAtlas: {fileID: 0} m_ImporterData: packables: - - {fileID: 21300000, guid: 6869fc80122cb044baa3653a39fb5ef7, type: 3} - {fileID: 21300000, guid: a2a575f6955103f4790d548f79c02f87, type: 3} - {fileID: 21300000, guid: fc7a3113730e6294f9356e3313ec8c29, type: 3} - {fileID: 21300000, guid: 2edb4f8554e42ad4ab2c363984b1779a, type: 3} diff --git a/Client/Assets/Scenes/Desingn.unity b/Client/Assets/Scenes/Desingn.unity index d760a4e..63eb03d 100644 --- a/Client/Assets/Scenes/Desingn.unity +++ b/Client/Assets/Scenes/Desingn.unity @@ -230,6 +230,9 @@ PrefabInstance: - targetCorrespondingSourceObject: {fileID: 7611974172231861040, guid: 48513b07f7f7f364b863b27de9a3f5e2, type: 3} insertIndex: -1 addedObject: {fileID: 630692318} + - targetCorrespondingSourceObject: {fileID: 7611974172231861040, guid: 48513b07f7f7f364b863b27de9a3f5e2, type: 3} + insertIndex: -1 + addedObject: {fileID: 335553191} - targetCorrespondingSourceObject: {fileID: 7611974172231861040, guid: 48513b07f7f7f364b863b27de9a3f5e2, type: 3} insertIndex: -1 addedObject: {fileID: 2069737132} @@ -242,9 +245,6 @@ PrefabInstance: - targetCorrespondingSourceObject: {fileID: 7611974172231861040, guid: 48513b07f7f7f364b863b27de9a3f5e2, type: 3} insertIndex: -1 addedObject: {fileID: 199957137} - - targetCorrespondingSourceObject: {fileID: 7611974172231861040, guid: 48513b07f7f7f364b863b27de9a3f5e2, type: 3} - insertIndex: -1 - addedObject: {fileID: 335553191} m_AddedComponents: - targetCorrespondingSourceObject: {fileID: 2463889675848662058, guid: 48513b07f7f7f364b863b27de9a3f5e2, type: 3} insertIndex: -1 @@ -337,12 +337,22 @@ MonoBehaviour: m_UXGroup: {fileID: 125612304} hoverAudioClip: {fileID: 0} clickAudioClip: {fileID: 0} - _hotKeyRefrence: {fileID: 0} - _hotkeyPressType: 0 - m_SelectionState: 0 m_OnValueChanged: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 727435696} + m_TargetAssemblyTypeName: TestMono, GameLogic + m_MethodName: Print + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 4 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_SelectionState: 0 --- !u!95 &199957136 Animator: serializedVersion: 7 @@ -769,7 +779,7 @@ GameObject: - component: {fileID: 335553193} - component: {fileID: 335553192} m_Layer: 5 - m_Name: Btn@test (6) + m_Name: right m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -873,12 +883,10 @@ MonoBehaviour: m_UXGroup: {fileID: 125612304} hoverAudioClip: {fileID: 0} clickAudioClip: {fileID: 0} - _hotKeyRefrence: {fileID: 0} - _hotkeyPressType: 0 - m_SelectionState: 0 m_OnValueChanged: m_PersistentCalls: m_Calls: [] + m_SelectionState: 0 --- !u!1 &561161494 GameObject: m_ObjectHideFlags: 0 @@ -940,12 +948,22 @@ MonoBehaviour: m_UXGroup: {fileID: 125612304} hoverAudioClip: {fileID: 0} clickAudioClip: {fileID: 0} - _hotKeyRefrence: {fileID: 0} - _hotkeyPressType: 0 - m_SelectionState: 0 m_OnValueChanged: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 727435696} + m_TargetAssemblyTypeName: TestMono, GameLogic + m_MethodName: Print + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 3 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_SelectionState: 0 --- !u!95 &561161496 Animator: serializedVersion: 7 @@ -1137,7 +1155,7 @@ GameObject: - component: {fileID: 630692320} - component: {fileID: 630692319} m_Layer: 5 - m_Name: Btn@test (5) + m_Name: left m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1241,12 +1259,10 @@ MonoBehaviour: m_UXGroup: {fileID: 125612304} hoverAudioClip: {fileID: 0} clickAudioClip: {fileID: 0} - _hotKeyRefrence: {fileID: 0} - _hotkeyPressType: 0 - m_SelectionState: 0 m_OnValueChanged: m_PersistentCalls: m_Calls: [] + m_SelectionState: 0 --- !u!1 &727435695 GameObject: m_ObjectHideFlags: 0 @@ -1276,7 +1292,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f09b695799b281842af084a0cb741bdd, type: 3} m_Name: m_EditorClassIdentifier: - _button: {fileID: 630692320} + _button: {fileID: 2069737134} + interactable: 1 --- !u!4 &727435697 Transform: m_ObjectHideFlags: 0 @@ -1740,12 +1757,22 @@ MonoBehaviour: m_UXGroup: {fileID: 125612304} hoverAudioClip: {fileID: 0} clickAudioClip: {fileID: 0} - _hotKeyRefrence: {fileID: 0} - _hotkeyPressType: 0 - m_SelectionState: 0 m_OnValueChanged: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 727435696} + m_TargetAssemblyTypeName: TestMono, GameLogic + m_MethodName: Print + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 2 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_SelectionState: 0 --- !u!95 &1134568825 Animator: serializedVersion: 7 @@ -2713,12 +2740,22 @@ MonoBehaviour: m_UXGroup: {fileID: 125612304} hoverAudioClip: {fileID: 0} clickAudioClip: {fileID: 0} - _hotKeyRefrence: {fileID: 0} - _hotkeyPressType: 0 - m_SelectionState: 0 m_OnValueChanged: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 727435696} + m_TargetAssemblyTypeName: TestMono, GameLogic + m_MethodName: Print + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_SelectionState: 0 --- !u!1 &2129144262 GameObject: m_ObjectHideFlags: 0 diff --git a/Client/Assets/Scripts/Hotfix/GameLogic/TestMono.cs b/Client/Assets/Scripts/Hotfix/GameLogic/TestMono.cs index 8fc64bc..ac599a1 100644 --- a/Client/Assets/Scripts/Hotfix/GameLogic/TestMono.cs +++ b/Client/Assets/Scripts/Hotfix/GameLogic/TestMono.cs @@ -1,23 +1,26 @@ -// using System; -// using Cysharp.Threading.Tasks; -// using Hotfix.GameLogic.TestWindow; -// using UnityEditor; -// using UnityEngine; -// using UnityEngine.Profiling; -// using UnityEngine.UI; -// -// -// public class TestMono : MonoBehaviour -// { -// public Action callBack; -// public UXButton _button; -// public bool interactable; -// public Selectable aa; -// private void OnGUI() -// { -// if (GUILayout.Button("HideUI")) -// { -// _button.Interactable = interactable; -// } -// } -// } +using System; +using Cysharp.Threading.Tasks; +using Hotfix.GameLogic.TestWindow; +using UnityEditor; +using UnityEngine; +using UnityEngine.Profiling; +using UnityEngine.UI; + + +public class TestMono : MonoBehaviour +{ + public Action callBack; + public UXButton _button; + public bool interactable; + + [Sirenix.OdinInspector.Button] + public void Test() + { + _button.Selected = interactable; + } + + public void Print(int index) + { + Debug.Log("Index"); + } +} diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs b/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs index 182b98e..e871b5d 100644 --- a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs +++ b/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs @@ -3,15 +3,18 @@ using System.Collections.Generic; using System.IO; using System.Reflection; using AlicizaX; -using HybridCLR; using UnityEngine; using YooAsset; +#if ENABLE_HYBRIDCLR +using HybridCLR; +#endif + namespace Unity.Startup.Procedure { public sealed class ProcedureLoadAssembly : StateBase { - // private bool m_enableAddressable = true; +#if ENABLE_HYBRIDCLR private int m_LoadAssetCount; private int m_LoadMetadataAssetCount; private int m_FailureAssetCount; @@ -24,9 +27,17 @@ namespace Unity.Startup.Procedure #pragma warning restore CS0414 private Assembly m_MainLogicAssembly; private List m_HotfixAssemblys; +#endif + protected override void OnEnter() { +#if !ENABLE_HYBRIDCLR + SwitchState(UpdateProcedureState.ProcedureUpdateFinishState); + return; +#endif + +#if ENABLE_HYBRIDCLR Log.Info(" ProcedureLoadAssembly OnEnter"); m_LoadAssemblyComplete = false; m_HotfixAssemblys = new List(); @@ -62,8 +73,10 @@ namespace Unity.Startup.Procedure { m_LoadAssemblyComplete = true; } +#endif } +#if ENABLE_HYBRIDCLR protected override void OnUpdate(float deltaTime) { @@ -224,13 +237,11 @@ namespace Unity.Startup.Procedure byte[] dllBytes = textAsset.bytes; fixed (byte* ptr = dllBytes) { -#if ENABLE_HYBRIDCLR // 加载assembly对应的dll,会自动为它hook。一旦Aot泛型函数的native函数不存在,用解释器版本代码 HomologousImageMode mode = HomologousImageMode.SuperSet; LoadImageErrorCode err = - (LoadImageErrorCode)HybridCLR.RuntimeApi.LoadMetadataForAOTAssembly(dllBytes, mode); + (LoadImageErrorCode)RuntimeApi.LoadMetadataForAOTAssembly(dllBytes, mode); Log.Info($"LoadMetadataForAOTAssembly:{assetName}. mode:{mode} ret:{err}"); -#endif } } catch (Exception e) @@ -246,5 +257,6 @@ namespace Unity.Startup.Procedure GameApp.Resource.UnloadAsset(textAsset); } +#endif } } diff --git a/Client/Assets/Test/GameLogic.dll.bytes b/Client/Assets/Test/GameLogic.dll.bytes index c235abdcca2982b752fa1d1620d413240377e71f..522fa12a9289738851b8a6d55220caeeb763ac69 100644 GIT binary patch delta 13210 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 delta 12759 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 diff --git a/Client/Assets/Test/GameLogic.pdb.bytes b/Client/Assets/Test/GameLogic.pdb.bytes index 7fecfc234085d9b932782a0db47f23710c964ace..fc60e73d9d08cee080802cce458f7f401424376c 100644 GIT binary patch delta 4548 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 delta 4346 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