From 835434c88eff66d1d1f98a0bb2923fcbc65e0d79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Tue, 2 Sep 2025 16:27:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Misc/EventScriptingDefineSymbols.cs | 46 +++++++++++ .../Misc/EventScriptingDefineSymbols.cs.meta | 3 + Plugins/EventSourceGenerator.dll | Bin 0 -> 27136 bytes Plugins/EventSourceGenerator.dll.meta | 52 ++++++++++++ Runtime/Event.meta | 3 + Runtime/Event/EventRuntimeHandle.cs | 36 +++++++++ Runtime/Event/EventRuntimeHandle.cs.meta | 3 + Runtime/Event/Il2CppSetOptionAttribute.cs | 74 ++++++++++++++++++ .../Event/Il2CppSetOptionAttribute.cs.meta | 2 + 9 files changed, 219 insertions(+) create mode 100644 Editor/Misc/EventScriptingDefineSymbols.cs create mode 100644 Editor/Misc/EventScriptingDefineSymbols.cs.meta create mode 100644 Plugins/EventSourceGenerator.dll create mode 100644 Plugins/EventSourceGenerator.dll.meta create mode 100644 Runtime/Event.meta create mode 100644 Runtime/Event/EventRuntimeHandle.cs create mode 100644 Runtime/Event/EventRuntimeHandle.cs.meta create mode 100644 Runtime/Event/Il2CppSetOptionAttribute.cs create mode 100644 Runtime/Event/Il2CppSetOptionAttribute.cs.meta diff --git a/Editor/Misc/EventScriptingDefineSymbols.cs b/Editor/Misc/EventScriptingDefineSymbols.cs new file mode 100644 index 0000000..9de3265 --- /dev/null +++ b/Editor/Misc/EventScriptingDefineSymbols.cs @@ -0,0 +1,46 @@ +using AlicizaX.Editor; +using UnityEditor; +using UnityEngine; + +namespace AlicizaX.Editor +{ + internal static class EventScriptingDefineSymbols + { + private const string MenuPath = "Tools/AlicizaX/Enable Strict Check"; + private const string DefineSymbol = "Event_StrictCheck"; + + [MenuItem(MenuPath)] + private static void ToggleStrictCheck() + { + bool enabled = IsEnabled(); + SetEnabled(!enabled); + } + + [MenuItem(MenuPath, true)] + private static bool ToggleStrictCheckValidate() + { + Menu.SetChecked(MenuPath, IsEnabled()); + return true; + } + + private static bool IsEnabled() + { + return ScriptingDefineSymbols.HasScriptingDefineSymbol(EditorUserBuildSettings.selectedBuildTargetGroup, DefineSymbol); + } + + private static void SetEnabled(bool enabled) + { + var targetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; + if (enabled) + { + ScriptingDefineSymbols.AddScriptingDefineSymbol(targetGroup, DefineSymbol); + } + else + { + ScriptingDefineSymbols.RemoveScriptingDefineSymbol(targetGroup, DefineSymbol); + } + + Debug.Log($"[EventKit] Strict Check {(enabled ? "Enabled" : "Disabled")}"); + } + } +} diff --git a/Editor/Misc/EventScriptingDefineSymbols.cs.meta b/Editor/Misc/EventScriptingDefineSymbols.cs.meta new file mode 100644 index 0000000..1ed3286 --- /dev/null +++ b/Editor/Misc/EventScriptingDefineSymbols.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a0f666b24d9c41c4a355f9a9a643928b +timeCreated: 1756782190 \ No newline at end of file diff --git a/Plugins/EventSourceGenerator.dll b/Plugins/EventSourceGenerator.dll new file mode 100644 index 0000000000000000000000000000000000000000..b800e5246b74ec59150611d238d68c10ad39d0bf GIT binary patch literal 27136 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 literal 0 HcmV?d00001 diff --git a/Plugins/EventSourceGenerator.dll.meta b/Plugins/EventSourceGenerator.dll.meta new file mode 100644 index 0000000..d0ee933 --- /dev/null +++ b/Plugins/EventSourceGenerator.dll.meta @@ -0,0 +1,52 @@ +fileFormatVersion: 2 +guid: e0f9fe588fe13b14ca28cddf735a2f0b +labels: +- RoslynAnalyzer +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 1 + settings: + Exclude Editor: 1 + Exclude Linux64: 0 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 0 + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 1 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Event.meta b/Runtime/Event.meta new file mode 100644 index 0000000..e74cce7 --- /dev/null +++ b/Runtime/Event.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 421689177e8f4c58ae0ce91e5ea9f9c3 +timeCreated: 1736415505 \ No newline at end of file diff --git a/Runtime/Event/EventRuntimeHandle.cs b/Runtime/Event/EventRuntimeHandle.cs new file mode 100644 index 0000000..6438bfe --- /dev/null +++ b/Runtime/Event/EventRuntimeHandle.cs @@ -0,0 +1,36 @@ +using System; +using System.Runtime.CompilerServices; +using Unity.IL2CPP.CompilerServices; + +namespace AlicizaX +{ + public interface IEventArgs { } + + [AttributeUsage(AttributeTargets.Struct)] + public sealed class PrewarmAttribute : Attribute + { + public int Capacity { get; } + public PrewarmAttribute(int capacity) => Capacity = capacity; + } + + [Il2CppSetOption(Option.NullChecks, false)] + [Il2CppSetOption(Option.DivideByZeroChecks, false)] + [Il2CppSetOption(Option.ArrayBoundsChecks, false)] + public readonly struct EventRuntimeHandle + { + private readonly Action _unsubscribe; + private readonly int _index; + private readonly int _version; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public EventRuntimeHandle(Action unsubscribe, int index, int version) + { + _unsubscribe = unsubscribe; + _index = index; + _version = version; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Dispose() => _unsubscribe?.Invoke(_index, _version); + } +} diff --git a/Runtime/Event/EventRuntimeHandle.cs.meta b/Runtime/Event/EventRuntimeHandle.cs.meta new file mode 100644 index 0000000..6539b7d --- /dev/null +++ b/Runtime/Event/EventRuntimeHandle.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d85feee75c2d4b54bd6b593fe55145d7 +timeCreated: 1740488369 \ No newline at end of file diff --git a/Runtime/Event/Il2CppSetOptionAttribute.cs b/Runtime/Event/Il2CppSetOptionAttribute.cs new file mode 100644 index 0000000..e7453df --- /dev/null +++ b/Runtime/Event/Il2CppSetOptionAttribute.cs @@ -0,0 +1,74 @@ +using System; + +namespace Unity.IL2CPP.CompilerServices +{ + /// + /// The code generation options available for IL to C++ conversion. + /// Enable or disabled these with caution. + /// + public enum Option + { + /// + /// Enable or disable code generation for null checks. + /// + /// Global null check support is enabled by default when il2cpp.exe + /// is launched from the Unity editor. + /// + /// Disabling this will prevent NullReferenceException exceptions from + /// being thrown in generated code. In *most* cases, code that dereferences + /// a null pointer will crash then. Sometimes the point where the crash + /// happens is later than the location where the null reference check would + /// have been emitted though. + /// + NullChecks = 1, + /// + /// Enable or disable code generation for array bounds checks. + /// + /// Global array bounds check support is enabled by default when il2cpp.exe + /// is launched from the Unity editor. + /// + /// Disabling this will prevent IndexOutOfRangeException exceptions from + /// being thrown in generated code. This will allow reading and writing to + /// memory outside of the bounds of an array without any runtime checks. + /// Disable this check with extreme caution. + /// + ArrayBoundsChecks = 2, + /// + /// Enable or disable code generation for divide by zero checks. + /// + /// Global divide by zero check support is disabled by default when il2cpp.exe + /// is launched from the Unity editor. + /// + /// Enabling this will cause DivideByZeroException exceptions to be + /// thrown in generated code. Most code doesn't need to handle this + /// exception, so it is probably safe to leave it disabled. + /// + DivideByZeroChecks = 3, + } + + /// + /// Use this attribute on an assembly, struct, class, method, or property to inform the IL2CPP code conversion utility to override the + /// global setting for one of a few different runtime checks. + /// + /// Example: + /// + /// [Il2CppSetOption(Option.NullChecks, false)] + /// public static string MethodWithNullChecksDisabled() + /// { + /// var tmp = new Object(); + /// return tmp.ToString(); + /// } + /// + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Delegate, Inherited = false, AllowMultiple = true)] + public class Il2CppSetOptionAttribute : Attribute + { + public Option Option { get; private set; } + public object Value { get; private set; } + + public Il2CppSetOptionAttribute(Option option, object value) + { + Option = option; + Value = value; + } + } +} diff --git a/Runtime/Event/Il2CppSetOptionAttribute.cs.meta b/Runtime/Event/Il2CppSetOptionAttribute.cs.meta new file mode 100644 index 0000000..691658c --- /dev/null +++ b/Runtime/Event/Il2CppSetOptionAttribute.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 997668ad76a5387428e679240d659155 \ No newline at end of file