This commit is contained in:
陈思海 2025-09-02 16:27:58 +08:00
parent 468a6ec694
commit 835434c88e
9 changed files with 219 additions and 0 deletions

View File

@ -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")}");
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a0f666b24d9c41c4a355f9a9a643928b
timeCreated: 1756782190

Binary file not shown.

View File

@ -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:

3
Runtime/Event.meta Normal file
View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 421689177e8f4c58ae0ce91e5ea9f9c3
timeCreated: 1736415505

View File

@ -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<int,int> _unsubscribe;
private readonly int _index;
private readonly int _version;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public EventRuntimeHandle(Action<int,int> unsubscribe, int index, int version)
{
_unsubscribe = unsubscribe;
_index = index;
_version = version;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Dispose() => _unsubscribe?.Invoke(_index, _version);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d85feee75c2d4b54bd6b593fe55145d7
timeCreated: 1740488369

View File

@ -0,0 +1,74 @@
using System;
namespace Unity.IL2CPP.CompilerServices
{
/// <summary>
/// The code generation options available for IL to C++ conversion.
/// Enable or disabled these with caution.
/// </summary>
public enum Option
{
/// <summary>
/// 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.
/// </summary>
NullChecks = 1,
/// <summary>
/// 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.
/// </summary>
ArrayBoundsChecks = 2,
/// <summary>
/// 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.
/// </summary>
DivideByZeroChecks = 3,
}
/// <summary>
/// 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();
/// }
/// </summary>
[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;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 997668ad76a5387428e679240d659155