Files
ShrinkModFramework/Runtime/Bootstrap/ShrinkModFrameworkSettings.cs
cneicy f6688ce573
Publish UPM package / publish (push) Successful in 2s
feat(security): 仅加载显式授权的外部 DLL
2026-08-28 03:44:10 +08:00

81 lines
2.9 KiB
C#

using UnityEngine;
namespace ShrinkModFramework
{
[CreateAssetMenu(fileName = "ShrinkModFrameworkSettings", menuName = "ShrinkSDK/模组/模组设置")]
public class ShrinkModFrameworkSettings : ScriptableObject
{
public const string PreferredResourcesPath =
"GameAssets/Runtime/Data/ShrinkSDK/ShrinkModFrameworkSettings";
public const string LegacyResourcesPath = "ShrinkModFrameworkSettings";
private static ShrinkModFrameworkSettings _instance;
public static ShrinkModFrameworkSettings Instance
{
get
{
if (_instance) return _instance;
_instance = Resources.Load<ShrinkModFrameworkSettings>(PreferredResourcesPath);
if (!_instance)
_instance = Resources.Load<ShrinkModFrameworkSettings>(LegacyResourcesPath);
#if UNITY_EDITOR
if (!_instance)
{
var guids = UnityEditor.AssetDatabase.FindAssets("t:ShrinkModFrameworkSettings");
if (guids.Length > 0)
{
var path = UnityEditor.AssetDatabase.GUIDToAssetPath(guids[0]);
_instance = UnityEditor.AssetDatabase.LoadAssetAtPath<ShrinkModFrameworkSettings>(path);
}
}
#endif
if (!_instance)
{
_instance = CreateInstance<ShrinkModFrameworkSettings>();
Debug.LogWarning(
"[ShrinkModFramework] 未找到 ShrinkModFrameworkSettings 配置文件,当前使用默认配置。");
}
return _instance;
}
internal set => _instance = value;
}
internal static void ResetCachedInstance()
{
_instance = null;
}
[Header("Bootstrap")]
public bool autoLoadOnStartup;
[Tooltip("使用 ShrinkContextHost 协调模组组件;关闭时回退到旧的只增不减 ShrinkModLoader。")]
public bool useContextHost = true;
[Header("Logging")]
public bool verboseLogging = true;
[Header("Discovery")]
public string[] assemblyNamePrefixes = new string[0];
[Header("External Mods")]
public bool enableExternalDllMods;
public bool autoCreateExternalModsDirectory = true;
public string externalModsFolderName = "Mods";
public bool watchExternalModsDirectory;
public float externalModsReloadDelaySeconds = 0.5f;
[Min(1)]
[Tooltip("Mono 下外部程序集 revision 会常驻;历史数量达到该软阈值后提示 Domain Reload/重启。")]
public int externalAssemblyRevisionSoftLimit = 16;
[Header("Harmony")]
public bool enableHarmonyPatching = true;
[Header("Networking")]
public bool enableNetworkSync = true;
}
}