自动化生成字典

This commit is contained in:
2025-12-12 15:19:10 +08:00
parent ae9793d6f9
commit ddf38a88b6
30 changed files with 353 additions and 294 deletions

View File

@@ -7,8 +7,7 @@ using Dreamteck.Splines;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using UnityEngine;
namespace Demo
@@ -17,68 +16,6 @@ namespace Demo
{
public static class DefaultInstantiate
{
public static Dictionary<string, Func<ScriptableObject>> GameObjectInstantiate = new()
{
{ $"{nameof(Anchor)}",Anchor.Make},
// Camera
{ $"{nameof(CameraObject)}",CameraObject.MakeCameraObject},
// Global Env
{ $"{nameof(PrefabRootObject)}",PrefabRootObject.Make },
{ $"{nameof(SkyUpdatement)}",SkyUpdatement.Make},
// Sub World
{ $"{nameof(SubWorld)}",SubWorld.Make},
};
public static Dictionary<string, Func<ScriptableObject>> DDTInstantiate = new()
{
{ $"{nameof(DDT)}",DDT.Make}
};
public static Dictionary<string, Func<ScriptableObject>> TickUpdatementInstantiate = new()
{
{ $"{nameof(LookAtAnchor)}",LookAtAnchor.Make},
{ $"{nameof(TickMovement)}",TickMovement.Make},
{ $"{nameof(TickRotation)}",TickRotation.Make},
{ $"{nameof(TickScaling)}",TickScaling.Make},
};
public static Dictionary<string, Func<ScriptableObject>> MaterialUpdatementInstantiate = new()
{
{ $"{nameof(MaterialUpdatement)}",MaterialUpdatement.Make},
{ $"{nameof(ColorUpdatement)}",ColorUpdatement.Make},
{ $"{nameof(EmissionColorUpdatement)}",EmissionColorUpdatement.Make},
};
public static Dictionary<string, Func<ScriptableObject>> SplineInstantiate = new()
{
{ $"{nameof(SplineCore)}",SplineCore.Make},
{ $"{nameof(SplineNode)}",SplineNode.Make},
{ $"{nameof(SplineAnchor)}",SplineAnchor.Make},
{ $"{nameof(SplineMovement)}",SplineMovement.Make},
{ $"{nameof(SplineRotation)}",SplineRotation.Make},
{ $"{nameof(SplineScaling)}",SplineScaling.Make},
{ $"{nameof(SplinePointerObject)}",SplinePointerObject.Make},
{ $"{nameof(SplineTrackRenderer)}",SplineTrackRenderer.Make},
{ $"{nameof(SplineTubeRenderer)}",SplineTubeRenderer.Make},
{ $"{nameof(SplineSurfaceRenderer)}",SplineSurfaceRenderer.Make},
{ $"{nameof(SplineRenderer)}",SplineRenderer.Make},
};
public static Dictionary<string, Func<ScriptableObject>> JudgementInstantiate = new()
{
// 可判定物只能有一个种类被使用,否则会引起输入检定冲突
{ $"{nameof(FullScreenInteraction)}",FullScreenInteraction.Make},
// Effect
{ $"{nameof(ParticleEffect)}",ParticleEffect.Make },
// JudgementEffect
{ $"{nameof(ParticleJudgement)}",ParticleJudgement.Make},
};
public static Dictionary<string, Func<ScriptableObject>> SingleVolumeInstantiate = new()
{
{ $"{nameof(MotionBlurVolume)}", MotionBlurVolume.Make }
};
public static void OpenInstantiateMenu(this ScriptableObject self, RectTransform item)
{
List<SharedModule.CallbackData> result = new()
@@ -99,13 +36,23 @@ namespace Demo
public static Dictionary<string, Func<ScriptableObject>> GetScriptableObjectInstantiate()
{
return s_ScriptableObjectInstantiate ??= new Dictionary<string, Func<ScriptableObject>>(GameObjectInstantiate
.Union(DDTInstantiate)
.Union(TickUpdatementInstantiate)
.Union(MaterialUpdatementInstantiate)
.Union(SplineInstantiate)
.Union(JudgementInstantiate)
.Union(SingleVolumeInstantiate));
//return s_ScriptableObjectInstantiate ??= new Dictionary<string, Func<ScriptableObject>>(GameObjectInstantiate
// .Union(DDTInstantiate)
// .Union(TickUpdatementInstantiate)
// .Union(MaterialUpdatementInstantiate)
// .Union(SplineInstantiate)
// .Union(JudgementInstantiate)
// .Union(SingleVolumeInstantiate));
if (s_ScriptableObjectInstantiate == null)
{
s_ScriptableObjectInstantiate = new();
foreach (var type in Utility.SeekType(x => x.IsSubclassOf(typeof(ScriptableObject)) && x.GetCustomAttribute<Attr.ScriptableAttribute>() != null))
{
var attr = type.GetCustomAttribute<Attr.ScriptableAttribute>();
s_ScriptableObjectInstantiate.Add(type.Name, () => (ScriptableObject)ConventionUtility.InvokeMember(type.GetMethod(attr.generaterName), null));
}
}
return s_ScriptableObjectInstantiate;
}
}
}