完成Config初步

This commit is contained in:
2025-12-17 15:50:03 +08:00
parent 60df9a93aa
commit 5a02de8c9c
14 changed files with 105 additions and 36 deletions

View File

@@ -238,7 +238,7 @@ namespace Demo.Game
{ {
if (Parent == null) if (Parent == null)
rootObjectCache = this as RootObject; rootObjectCache = this as RootObject;
if (Parent is RootObject result) else if (Parent is RootObject result)
rootObjectCache = result; rootObjectCache = result;
else else
rootObjectCache = Parent.GetRoot(); rootObjectCache = Parent.GetRoot();

View File

@@ -1,6 +1,6 @@
using Convention; using Convention;
using Demo.Game.Attr; using Demo.Game.Attr;
using NUnit.Framework.Internal; using System.Linq;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@@ -14,11 +14,20 @@ namespace Demo.Game
{ {
public bool IsZooming; public bool IsZooming;
public MathExtension.EaseCurveType ZoomCurve = MathExtension.EaseCurveType.OutCubic; public MathExtension.EaseCurveType ZoomCurve = MathExtension.EaseCurveType.OutCubic;
public IInteraction.JudgementLevel[] LevelArray;
public string[] AssetBundles;
public string[] Prefabs;
public float[] Durations;
public override void Deserialize(BinaryReader reader) public override void Deserialize(BinaryReader reader)
{ {
IsZooming = BinarySerializeUtility.ReadBool(reader); IsZooming = BinarySerializeUtility.ReadBool(reader);
ZoomCurve = (MathExtension.EaseCurveType)BinarySerializeUtility.ReadInt(reader); ZoomCurve = (MathExtension.EaseCurveType)BinarySerializeUtility.ReadInt(reader);
var temp = BinarySerializeUtility.DeserializeIntArray(reader);
LevelArray = (from item in temp select (IInteraction.JudgementLevel)item).ToArray();
AssetBundles = BinarySerializeUtility.DeserializeStringArray(reader);
Prefabs = BinarySerializeUtility.DeserializeStringArray(reader);
Durations = BinarySerializeUtility.DeserializeFloatArray(reader);
base.Deserialize(reader); base.Deserialize(reader);
} }
@@ -26,6 +35,10 @@ namespace Demo.Game
{ {
BinarySerializeUtility.WriteBool(writer, IsZooming); BinarySerializeUtility.WriteBool(writer, IsZooming);
BinarySerializeUtility.WriteInt(writer, (int)ZoomCurve); BinarySerializeUtility.WriteInt(writer, (int)ZoomCurve);
BinarySerializeUtility.SerializeArray(writer, (from item in LevelArray select (int)item).ToArray());
BinarySerializeUtility.SerializeArray(writer, AssetBundles);
BinarySerializeUtility.SerializeArray(writer, Prefabs);
BinarySerializeUtility.SerializeArray(writer, Durations);
base.Serialize(writer); base.Serialize(writer);
} }
} }

View File

@@ -44,7 +44,7 @@ namespace Demo.Game
[Convention.RScript.Variable.Attr.Method] [Convention.RScript.Variable.Attr.Method]
public void Add(float time, ScriptableObject target) public void Add(float time, ScriptableObject target)
{ {
ManualAddEntry(time, LookAtCache.Count - 1, default); ManualAddEntry(time, GetRoot().FindIndex(target), default);
} }
/// <summary> /// <summary>

View File

@@ -1,10 +1,31 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using Convention; using Convention;
using UnityEngine; using UnityEngine;
namespace Demo.Game namespace Demo.Game
{ {
namespace ConfigType
{
public class BaseOnMaterialUpdatementConfig : UpdatementFloatConfig
{
public int TargetMeshRenderer;
public override void Deserialize(BinaryReader reader)
{
TargetMeshRenderer = BinarySerializeUtility.ReadInt(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteInt(writer, TargetMeshRenderer);
base.Serialize(writer);
}
}
}
public abstract class BaseOnMaterialUpdatement : Updatement<float> public abstract class BaseOnMaterialUpdatement : Updatement<float>
{ {
public abstract string TargetFieldName { get; } public abstract string TargetFieldName { get; }
@@ -27,13 +48,9 @@ namespace Demo.Game
/// </summary> /// </summary>
/// <param name="path">脚本位置</param> /// <param name="path">脚本位置</param>
[Convention.RScript.Variable.Attr.Method] [Convention.RScript.Variable.Attr.Method]
public void Load(string path) public void Load(ScriptableObject obj)
{ {
var so = FindWithPath(path, false); TargetMeshRenderer = obj.GetComponent<MeshRenderer>();
if (so != null)
{
TargetMeshRenderer = so.GetComponent<MeshRenderer>();
}
} }
} }
} }

View File

@@ -1,11 +1,13 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Convention; using Convention;
using Demo.Game.Attr;
using Unity.VisualScripting; using Unity.VisualScripting;
using UnityEngine; using UnityEngine;
namespace Demo.Game namespace Demo.Game
{ {
[Scriptable]
public class ColorUpdatement : BaseOnMaterialUpdatement public class ColorUpdatement : BaseOnMaterialUpdatement
{ {
public static ColorUpdatement Make() public static ColorUpdatement Make()

View File

@@ -1,11 +1,13 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Convention; using Convention;
using Demo.Game.Attr;
using Unity.VisualScripting; using Unity.VisualScripting;
using UnityEngine; using UnityEngine;
namespace Demo.Game namespace Demo.Game
{ {
[Scriptable]
public class EmissionColorUpdatement : BaseOnMaterialUpdatement public class EmissionColorUpdatement : BaseOnMaterialUpdatement
{ {
public static EmissionColorUpdatement Make() public static EmissionColorUpdatement Make()

View File

@@ -36,6 +36,16 @@ namespace Demo.Game
public abstract class BasicSplineRenderer : Updatement<SplineClipDuration>, IAssetBundleLoader, IDependOnSplineCore public abstract class BasicSplineRenderer : Updatement<SplineClipDuration>, IAssetBundleLoader, IDependOnSplineCore
{ {
/// <summary>
/// 加载并绑定到新样条线
/// </summary>
/// <param name="path">对象路径, 不存在时则立刻加载</param>
[Convention.RScript.Variable.Attr.Method]
public void LoadSpline(SplineCore core)
{
MySplineCore = core;
}
[Content] public SplineCore MySplineCore { get; set; } [Content] public SplineCore MySplineCore { get; set; }
[Content] private MeshFilter m_MeshFilter; [Content] private MeshFilter m_MeshFilter;
[Content] private MeshRenderer m_MyMeshRenderer; [Content] private MeshRenderer m_MyMeshRenderer;

View File

@@ -38,6 +38,15 @@ namespace Demo.Game
[Scriptable] [Scriptable]
public class SplineAnchor : ScriptableObject, IDependOnSplineCore public class SplineAnchor : ScriptableObject, IDependOnSplineCore
{ {
/// <summary>
/// 加载并绑定到新样条线
/// </summary>
/// <param name="path">对象路径, 不存在时则立刻加载</param>
[Convention.RScript.Variable.Attr.Method]
public void LoadSpline(SplineCore core)
{
MySplineCore = core;
}
public static SplineAnchor Make() public static SplineAnchor Make()
{ {
return new GameObject().AddComponent<SplineAnchor>(); return new GameObject().AddComponent<SplineAnchor>();

View File

@@ -51,15 +51,7 @@ namespace Demo.Game
public interface IDependOnSplineCore : IScriptableObject public interface IDependOnSplineCore : IScriptableObject
{ {
SplineCore MySplineCore { get; set; } SplineCore MySplineCore { get; set; }
/// <summary> void LoadSpline(SplineCore core);
/// 加载并绑定到新样条线
/// </summary>
/// <param name="path">对象路径, 不存在时则立刻加载</param>
[Convention.RScript.Variable.Attr.Method]
void LoadSpline(SplineCore core)
{
MySplineCore = core;
}
} }
[Scriptable] [Scriptable]

View File

@@ -27,6 +27,15 @@ namespace Demo.Game
public abstract class BasicSplineJustFollow : Updatement<float>, IDependOnSplineCore public abstract class BasicSplineJustFollow : Updatement<float>, IDependOnSplineCore
{ {
/// <summary>
/// 加载并绑定到新样条线
/// </summary>
/// <param name="path">对象路径, 不存在时则立刻加载</param>
[Convention.RScript.Variable.Attr.Method]
public void LoadSpline(SplineCore core)
{
MySplineCore = core;
}
public SplineCore MySplineCore { get; set; } public SplineCore MySplineCore { get; set; }
protected override float Lerp(float begin, float end, float t) protected override float Lerp(float begin, float end, float t)

View File

@@ -9,23 +9,6 @@ using UnityEngine.Rendering.Universal;
namespace Demo.Game namespace Demo.Game
{ {
namespace ConfigType
{
// BaseVolume 配置抽象基类Config
public class BaseVolumeConfig : ScriptLoadableConfig
{
public override void Deserialize(BinaryReader reader)
{
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
base.Serialize(writer);
}
}
}
public abstract class BaseVolume : ScriptableObject public abstract class BaseVolume : ScriptableObject
{ {
[Resources, SerializeField] private Volume m_volume; [Resources, SerializeField] private Volume m_volume;

View File

@@ -4,6 +4,11 @@ using UnityEngine.Rendering.Universal;
namespace Demo.Game namespace Demo.Game
{ {
namespace ConfigType
{
}
[Scriptable] [Scriptable]
public class MotionBlurVolume : BaseForSingleVolume<MotionBlur> public class MotionBlurVolume : BaseForSingleVolume<MotionBlur>
{ {

View File

@@ -1,10 +1,37 @@
using Convention; using Convention;
using Demo.Game.Attr; using Demo.Game.Attr;
using System.Collections; using System.Collections;
using System.IO;
using UnityEngine; using UnityEngine;
namespace Demo.Game namespace Demo.Game
{ {
namespace ConfigType
{
public class BaseVolumeUpdatementConfig:ScriptLoadableConfig
{
public int target;
public string updateOverride;
public string updateField;
public override void Deserialize(BinaryReader reader)
{
target = BinarySerializeUtility.ReadInt(reader);
updateOverride = BinarySerializeUtility.ReadString(reader);
updateField = BinarySerializeUtility.ReadString(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteInt(writer, target);
BinarySerializeUtility.WriteString(writer, updateOverride);
BinarySerializeUtility.WriteString(writer, updateField);
base.Serialize(writer);
}
}
}
public abstract class BaseVolumeUpdatement<T> : Updatement<T> where T : unmanaged public abstract class BaseVolumeUpdatement<T> : Updatement<T> where T : unmanaged
{ {
[Content, SerializeField] private BaseVolume target; [Content, SerializeField] private BaseVolume target;

View File

@@ -10,7 +10,7 @@ namespace Demo.Game
namespace ConfigType namespace ConfigType
{ {
// VolumeObject 配置 // VolumeObject 配置
public class VolumeObjectConfig : BaseVolumeConfig public class VolumeObjectConfig : ScriptLoadableConfig
{ {
public string MyAssetBundle, MyProfile; public string MyAssetBundle, MyProfile;