From 60df9a93aa795f73d23cf6b9fb21ce0c52a02531 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Tue, 16 Dec 2025 17:54:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E5=8A=A8Config=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Convention | 2 +- .../Scripts/Environment/PrefabRootObject.cs | 20 ++++++- Assets/Scripts/Environment/SkyUpdatement.cs | 28 ++++++++++ Assets/Scripts/Framework/CameraObject.cs | 49 +++++++++++++++++ .../Framework/GameContent/GameController.cs | 14 ++++- Assets/Scripts/Framework/RootObject.cs | 54 ++++++++++++++++++- Assets/Scripts/Framework/ScriptableObject.cs | 30 ++++++----- Assets/Scripts/Framework/Updatement.cs | 16 +++--- .../Interaction/Effect/ParticleEffect.cs | 52 +++++++++++++++--- .../Scripts/Interaction/IEffectHookObject.cs | 3 ++ Assets/Scripts/Interaction/IInteraction.cs | 7 --- .../Interaction/IJudgementHookObject.cs | 6 +-- .../JudgementEffect/ParticleJudgement.cs | 24 +++++++++ Assets/Scripts/LookAtAnchor.cs | 5 +- Assets/Scripts/MaterialUpdatement.cs | 26 +++++++++ .../PointBaseRenderer/BasicSplineRenderer.cs | 44 +++++++-------- .../PointBaseRenderer/SplineTubeRenderer.cs | 26 +++++++++ Assets/Scripts/MoreSpline/SplineAnchor.cs | 44 ++++++++++----- Assets/Scripts/MoreSpline/SplineCore.cs | 23 ++------ Assets/Scripts/MoreSpline/SplineNode.cs | 37 +++++++++++-- .../Updatement/BasicSplineJustFollow.cs | 34 +++++++----- 21 files changed, 427 insertions(+), 117 deletions(-) diff --git a/Assets/Convention b/Assets/Convention index a530eba..fd68071 160000 --- a/Assets/Convention +++ b/Assets/Convention @@ -1 +1 @@ -Subproject commit a530eba460e2d2bb87cf704d95999ce6399ecd60 +Subproject commit fd68071416663ae852495245c8a5f49b70f4a7f0 diff --git a/Assets/Scripts/Environment/PrefabRootObject.cs b/Assets/Scripts/Environment/PrefabRootObject.cs index 7361643..369db10 100644 --- a/Assets/Scripts/Environment/PrefabRootObject.cs +++ b/Assets/Scripts/Environment/PrefabRootObject.cs @@ -1,8 +1,10 @@ using Convention; using Demo.Game.Attr; +using System; using System.Collections; using System.Collections.Generic; using System.IO; +using System.Linq; using UnityEngine; namespace Demo.Game @@ -11,15 +13,31 @@ namespace Demo.Game { public class PrefabRootObjectConfig : ScriptLoadableConfig { - private readonly Dictionary> LoadedGameObjectNames = new(); + public Dictionary LoadedGameObjectNames = new(); public override void Deserialize(BinaryReader reader) { + int count = BinarySerializeUtility.ReadInt(reader); + for (; count > 0;count--) + { + var temp = BinarySerializeUtility.DeserializeStringArray(reader); + var key = temp[0]; + var value = temp[1..]; + LoadedGameObjectNames.Add(key, value); + } base.Deserialize(reader); } public override void Serialize(BinaryWriter writer) { + BinarySerializeUtility.WriteInt(writer, LoadedGameObjectNames.Count); + foreach (var (key,value) in LoadedGameObjectNames) + { + string[] temp = new string[value.Length + 1]; + temp[0] = key; + Array.Copy(value, 0, temp, 1, value.Length); + BinarySerializeUtility.SerializeArray(writer, value.ToArray()); + } base.Serialize(writer); } } diff --git a/Assets/Scripts/Environment/SkyUpdatement.cs b/Assets/Scripts/Environment/SkyUpdatement.cs index 196f0eb..4757219 100644 --- a/Assets/Scripts/Environment/SkyUpdatement.cs +++ b/Assets/Scripts/Environment/SkyUpdatement.cs @@ -2,10 +2,38 @@ using Convention; using Demo.Game.Attr; using System.Collections; using System.Collections.Generic; +using System.IO; +using Unity.Collections; using UnityEngine; namespace Demo.Game { + namespace ConfigType + { + public class SkyUpdatementConfig : UpdatementIntConfig + { + public string SkyAssetBundlePath; + public string[] SkyNames; + public int[] SkyIndexs; + + public override void Deserialize(BinaryReader reader) + { + SkyAssetBundlePath = BinarySerializeUtility.ReadString(reader); + SkyNames = BinarySerializeUtility.DeserializeStringArray(reader); + SkyIndexs = BinarySerializeUtility.DeserializeIntArray(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteString(writer, SkyAssetBundlePath); + BinarySerializeUtility.SerializeArray(writer, SkyNames); + BinarySerializeUtility.SerializeArray(writer, SkyIndexs); + base.Serialize(writer); + } + } + } + [Scriptable] public class SkyUpdatement : Updatement, IAssetBundleLoader { diff --git a/Assets/Scripts/Framework/CameraObject.cs b/Assets/Scripts/Framework/CameraObject.cs index 70bf96c..c942b72 100644 --- a/Assets/Scripts/Framework/CameraObject.cs +++ b/Assets/Scripts/Framework/CameraObject.cs @@ -7,9 +7,58 @@ using Cinemachine; using Convention.WindowsUI.Variant; using UnityEngine; using Demo.Game.Attr; +using System.IO; +using Convention; namespace Demo.Game { + namespace ConfigType + { + public class CameraObjectConfig : ScriptLoadableConfig + { + public bool orthographic; + public float fieldOfView; + public float orthographicSize; + public float nearClipPlane; + public float farClipPlane; + public float depth; + public int VirtualCameraFollow; + public int VirtualCameraLookAt; + public Vector3 VirtualCameraFollowOffset; + public Vector3 VirtualCameraLookAtDamping; + + public override void Deserialize(BinaryReader reader) + { + orthographic = BinarySerializeUtility.ReadBool(reader); + fieldOfView = BinarySerializeUtility.ReadFloat(reader); + orthographicSize = BinarySerializeUtility.ReadFloat(reader); + nearClipPlane = BinarySerializeUtility.ReadFloat(reader); + farClipPlane = BinarySerializeUtility.ReadFloat(reader); + depth = BinarySerializeUtility.ReadFloat(reader); + VirtualCameraFollow = BinarySerializeUtility.ReadInt(reader); + VirtualCameraLookAt = BinarySerializeUtility.ReadInt(reader); + VirtualCameraFollowOffset = BinarySerializeUtility.ReadVec3(reader); + VirtualCameraLookAtDamping = BinarySerializeUtility.ReadVec3(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteBool(writer, orthographic); + BinarySerializeUtility.WriteFloat(writer, fieldOfView); + BinarySerializeUtility.WriteFloat(writer, orthographicSize); + BinarySerializeUtility.WriteFloat(writer, nearClipPlane); + BinarySerializeUtility.WriteFloat(writer, farClipPlane); + BinarySerializeUtility.WriteFloat(writer, depth); + BinarySerializeUtility.WriteInt(writer, VirtualCameraFollow); + BinarySerializeUtility.WriteInt(writer,VirtualCameraLookAt); + BinarySerializeUtility.WriteVec3(writer, VirtualCameraFollowOffset); + BinarySerializeUtility.WriteVec3(writer, VirtualCameraLookAtDamping); + base.Serialize(writer); + } + } + } + [Scriptable(nameof(MakeCameraObject))] public class CameraObject : ScriptableObject { diff --git a/Assets/Scripts/Framework/GameContent/GameController.cs b/Assets/Scripts/Framework/GameContent/GameController.cs index 939a264..9f75eed 100644 --- a/Assets/Scripts/Framework/GameContent/GameController.cs +++ b/Assets/Scripts/Framework/GameContent/GameController.cs @@ -231,16 +231,26 @@ namespace Demo.Game yield break; } yield return Foo(rootGameObject.ParseFromScriptFile2Expr(rootObject));//ConventionUtility.AvoidFakeStop(rootGameObject.ParseFromScriptFile2Expr(rootObject)); - static void NDFS(ScriptableObject current) + int applyDownCount = 0; + void NDFS(ScriptableObject current) { foreach (var child in current.Childs) { NDFS(child); } if (current.IsScriptApply == false) - ConventionUtility.StartCoroutine(current.ApplyScript()); + { + applyDownCount++; + IEnumerator NDFSFoo() + { + yield return current.ApplyScript(); + applyDownCount--; + } + ConventionUtility.StartCoroutine(NDFSFoo()); + } } NDFS(rootGameObject); + yield return new WaitUntil(() => applyDownCount == 0); float loadRootObjectEndTime = Time.realtimeSinceStartup; float loadRootObjectElapsed = (loadRootObjectEndTime - loadRootObjectStartTime) * 1000f; Debug.Log($"[GameInit] Load Root Object 耗时: {loadRootObjectElapsed:F2} ms", this); diff --git a/Assets/Scripts/Framework/RootObject.cs b/Assets/Scripts/Framework/RootObject.cs index 01a090b..756da07 100644 --- a/Assets/Scripts/Framework/RootObject.cs +++ b/Assets/Scripts/Framework/RootObject.cs @@ -3,6 +3,8 @@ using Convention.WindowsUI.Variant; using System; using System.Collections; using System.Collections.Generic; +using System.IO; +using System.Linq; using UnityEngine; using UnityEngine.InputSystem; @@ -16,8 +18,56 @@ namespace Demo.Game [Content] public GameController RootGameController; - public string SourcePath; - public HashSet LoadedScriptSet = new(); + [Setting]public string SourcePath; + [Header("GlobalConfig")] + public readonly HashSet LoadedScriptSet = new(); + public readonly Dictionary LoadedScriptIndex = new(); + public readonly Dictionary LoadedScriptRIndex = new(); + private int LoadedScriptCnt = 0; + /// + /// 被用于自动生成 + /// + /// + /// + public int PushLoadedScriptObject(ScriptableObject obj) + { + while (LoadedScriptIndex.TryAdd(LoadedScriptCnt, obj) == false) + LoadedScriptCnt++; + LoadedScriptRIndex.Add(obj, LoadedScriptCnt); + return LoadedScriptCnt++; + } + /// + /// 被用于从缓存中生成 + /// + /// + /// + /// + public int PushLoadedScriptObject(ScriptableObject obj, int index) + { + LoadedScriptIndex.Add(index, obj); + LoadedScriptRIndex.Add(obj, index); + return index; + } + /// + /// 通过序列号获得物体 + /// + /// + /// + public ScriptableObject FindWithIndex(int index) + { + if(index<0) + return null; + return LoadedScriptIndex[index]; + } + /// + /// 通过物体获得序列号 + /// + /// + /// 若无法找到将返回-1 + public int FindIndex(ScriptableObject obj) + { + return LoadedScriptRIndex.TryGetValue(obj, out var index) ? index : -1; + } protected override IEnumerator DoSomethingDuringApplyScript() { diff --git a/Assets/Scripts/Framework/ScriptableObject.cs b/Assets/Scripts/Framework/ScriptableObject.cs index 2ee2b98..0d9c589 100644 --- a/Assets/Scripts/Framework/ScriptableObject.cs +++ b/Assets/Scripts/Framework/ScriptableObject.cs @@ -36,6 +36,7 @@ namespace Demo.Game { public class ScriptLoadableConfig { + public int UID = -1; public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling; public bool IsSetObjectDisable; public int UpdatePerFrame; @@ -51,6 +52,7 @@ namespace Demo.Game public virtual void Deserialize(BinaryReader reader) { + UID = BinarySerializeUtility.ReadInt(reader); EnterGameLocalPosition = BinarySerializeUtility.ReadVec3(reader); EnterGameEulerAngles = BinarySerializeUtility.ReadVec3(reader); EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader); @@ -69,6 +71,7 @@ namespace Demo.Game } public virtual void Serialize(BinaryWriter writer) { + BinarySerializeUtility.WriteInt(writer, UID); BinarySerializeUtility.WriteVec3(writer, EnterGameLocalPosition); BinarySerializeUtility.WriteVec3(writer, EnterGameEulerAngles); BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling); @@ -223,6 +226,7 @@ namespace Demo.Game public ScriptableObject Parent; public readonly List Childs = new(); + private RootObject rootObjectCache = null; /// /// 获取根脚本对象 /// @@ -230,12 +234,16 @@ namespace Demo.Game [Convention.RScript.Variable.Attr.Method] public RootObject GetRoot() { - if (Parent == null) - return this as RootObject; - if (Parent is RootObject result) - return result; - else - return Parent.GetRoot(); + if (rootObjectCache == null) + { + if (Parent == null) + rootObjectCache = this as RootObject; + if (Parent is RootObject result) + rootObjectCache = result; + else + rootObjectCache = Parent.GetRoot(); + } + return rootObjectCache; } @@ -334,6 +342,7 @@ namespace Demo.Game isEnableScript = true; // 只有RootObject的parent会是空的 + GetRoot().PushLoadedScriptObject(this); if (parent != null) { MyHierarchyItem = parent.MyHierarchyItem.GetHierarchyItem().CreateSubPropertyItem(1)[0]; @@ -819,19 +828,12 @@ namespace Demo.Game } } - private float UIResizeOnTimelineCount = 0; protected override void UpdateTicks(float currentTime, float deltaTime, TickType tickType) { base.UpdateTicks(currentTime, deltaTime, tickType); - // 存在严重的性能开销, 在解决之前将不会允许其快速自动更新 if (MyTimelineEntry != null) { - if (UIResizeOnTimelineCount > 0.1 || tickType != TickType.Update) - { - UIResizeOnTimelineCount = 0; - MyTimelineItem.ResizeOnTimeline(); - } - UIResizeOnTimelineCount += deltaTime; + MyTimelineItem.ResizeOnTimeline(); } } diff --git a/Assets/Scripts/Framework/Updatement.cs b/Assets/Scripts/Framework/Updatement.cs index 6b42a4d..48f77e1 100644 --- a/Assets/Scripts/Framework/Updatement.cs +++ b/Assets/Scripts/Framework/Updatement.cs @@ -55,12 +55,12 @@ namespace Demo.Game public class UpdatementIntConfig : UpdatementConfig { - protected override void DeserializePositions(BinaryReader reader, ref NativeArray positions) + protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray positions) { BinarySerializeUtility.DeserializeNativeArray(reader, ref positions); } - protected override void SerializePositions(BinaryWriter writer, in NativeArray positions) + protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray positions) { BinarySerializeUtility.SerializeNativeArray(writer, positions); } @@ -68,12 +68,12 @@ namespace Demo.Game public class UpdatementFloatConfig : UpdatementConfig { - protected override void DeserializePositions(BinaryReader reader, ref NativeArray positions) + protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray positions) { BinarySerializeUtility.DeserializeNativeArray(reader, ref positions); } - protected override void SerializePositions(BinaryWriter writer, in NativeArray positions) + protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray positions) { BinarySerializeUtility.SerializeNativeArray(writer, positions); } @@ -81,12 +81,12 @@ namespace Demo.Game public class UpdatementVec2Config : UpdatementConfig { - protected override void DeserializePositions(BinaryReader reader, ref NativeArray positions) + protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray positions) { BinarySerializeUtility.DeserializeNativeArray(reader, ref positions); } - protected override void SerializePositions(BinaryWriter writer, in NativeArray positions) + protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray positions) { BinarySerializeUtility.SerializeNativeArray(writer, positions); } @@ -94,12 +94,12 @@ namespace Demo.Game public class UpdatementVec3Config : UpdatementConfig { - protected override void DeserializePositions(BinaryReader reader, ref NativeArray positions) + protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray positions) { BinarySerializeUtility.DeserializeNativeArray(reader, ref positions); } - protected override void SerializePositions(BinaryWriter writer, in NativeArray positions) + protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray positions) { BinarySerializeUtility.SerializeNativeArray(writer, positions); } diff --git a/Assets/Scripts/Interaction/Effect/ParticleEffect.cs b/Assets/Scripts/Interaction/Effect/ParticleEffect.cs index 9802f23..2654d9d 100644 --- a/Assets/Scripts/Interaction/Effect/ParticleEffect.cs +++ b/Assets/Scripts/Interaction/Effect/ParticleEffect.cs @@ -1,12 +1,47 @@ using Convention; using Demo.Game.Attr; +using System; using System.Collections; using System.Collections.Generic; +using System.IO; using System.Linq; using UnityEngine; namespace Demo.Game { + namespace ConfigType + { + public class ParticleEffectConfig : IEffectHookObjectConfig + { + public Dictionary AssetBundles; + public override void Deserialize(BinaryReader reader) + { + int count = BinarySerializeUtility.ReadInt(reader); + while(count-->0) + { + var temp = BinarySerializeUtility.DeserializeStringArray(reader); + var key = temp[0]; + var value = temp[1..]; + AssetBundles.Add(key, value); + } + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteInt(writer, AssetBundles.Count); + foreach (var (key, value) in AssetBundles) + { + string[] temp = new string[value.Length + 1]; + temp[0] = key; + Array.Copy(value, 0, temp, 1, value.Length); + BinarySerializeUtility.SerializeArray(writer, value.ToArray()); + } + base.Serialize(writer); + } + } + } + [Scriptable] public class ParticleEffect : IEffectHookObject, IAssetBundleLoader { @@ -15,15 +50,14 @@ namespace Demo.Game return new GameObject().AddComponent(); } - private Dictionary AssetBundleLoaders = new(); - private readonly List AssetBundles = new(); + private int AssetBundleLoadingCounter = 0; + private readonly Dictionary> AssetBundles = new(); private readonly List Prefabs = new(); protected override IEnumerator DoSomethingDuringApplyScript() { yield return base.DoSomethingDuringApplyScript(); - while (AssetBundleLoaders.Any(x => x.Value == false)) - yield return null; + yield return new WaitUntil(() => AssetBundleLoadingCounter == 0); } public override IEnumerator UnloadScript() @@ -31,7 +65,7 @@ namespace Demo.Game yield return base.UnloadScript(); foreach (var ab in AssetBundles) { - yield return this.UnloadAssetBundle(ab); + yield return this.UnloadAssetBundle(ab.Key); } } @@ -43,7 +77,7 @@ namespace Demo.Game [Convention.RScript.Variable.Attr.Method] public void Load(string ab, string prefab) { - AssetBundleLoaders.TryAdd(ab, false); + AssetBundleLoadingCounter++; ConventionUtility.StartCoroutine(this.LoadAssetBundle(ab, x => { GameObject sub = Instantiate(x.LoadAsset(prefab)); @@ -51,8 +85,10 @@ namespace Demo.Game Prefabs.Add(sub); sub.transform.SetParent(transform); sub.transform.localPosition = Vector3.zero; - AssetBundles.Add(ab); - AssetBundleLoaders[ab] = true; + if(AssetBundles.ContainsKey(ab)==false) + AssetBundles.Add(ab, new()); + AssetBundles[ab].Add(prefab); + AssetBundleLoadingCounter--; })); } diff --git a/Assets/Scripts/Interaction/IEffectHookObject.cs b/Assets/Scripts/Interaction/IEffectHookObject.cs index 9cbb6c8..856deb0 100644 --- a/Assets/Scripts/Interaction/IEffectHookObject.cs +++ b/Assets/Scripts/Interaction/IEffectHookObject.cs @@ -11,16 +11,19 @@ namespace Demo.Game // IEffectHookObject 配置(抽象基类Config) public class IEffectHookObjectConfig : ScriptLoadableConfig { + public int MyInteractionModule; public IEffectHookObject.InteractiveEffectType MyInteractiveLevel; public override void Deserialize(BinaryReader reader) { + MyInteractionModule = BinarySerializeUtility.ReadInt(reader); MyInteractiveLevel = (IEffectHookObject.InteractiveEffectType)BinarySerializeUtility.ReadInt(reader); base.Deserialize(reader); } public override void Serialize(BinaryWriter writer) { + BinarySerializeUtility.WriteInt(writer, MyInteractionModule); BinarySerializeUtility.WriteInt(writer, (int)MyInteractiveLevel); base.Serialize(writer); } diff --git a/Assets/Scripts/Interaction/IInteraction.cs b/Assets/Scripts/Interaction/IInteraction.cs index 13f5780..ee83e76 100644 --- a/Assets/Scripts/Interaction/IInteraction.cs +++ b/Assets/Scripts/Interaction/IInteraction.cs @@ -10,15 +10,12 @@ namespace Demo.Game { namespace ConfigType { - // IInteraction 配置(抽象基类Config,继承自TimelineScriptObject) public class IInteractionConfig : ScriptLoadableConfig { public Vector2 VisibleDuration; public Vector2 InteractiveDuration; public Vector2 InteractableScoreInterval; public Vector2 InteractableIntervalThatCanScoreBest; - public IInteraction.JudgementLevel MyJudgementLevel; - public IInteraction.UpdatePhase MyUpdatePhase; public override void Deserialize(BinaryReader reader) { @@ -26,8 +23,6 @@ namespace Demo.Game InteractiveDuration = BinarySerializeUtility.ReadVec2(reader); InteractableScoreInterval = BinarySerializeUtility.ReadVec2(reader); InteractableIntervalThatCanScoreBest = BinarySerializeUtility.ReadVec2(reader); - MyJudgementLevel = (IInteraction.JudgementLevel)BinarySerializeUtility.ReadInt(reader); - MyUpdatePhase = (IInteraction.UpdatePhase)BinarySerializeUtility.ReadInt(reader); base.Deserialize(reader); } @@ -37,8 +32,6 @@ namespace Demo.Game BinarySerializeUtility.WriteVec2(writer, InteractiveDuration); BinarySerializeUtility.WriteVec2(writer, InteractableScoreInterval); BinarySerializeUtility.WriteVec2(writer, InteractableIntervalThatCanScoreBest); - BinarySerializeUtility.WriteInt(writer, (int)MyJudgementLevel); - BinarySerializeUtility.WriteInt(writer, (int)MyUpdatePhase); base.Serialize(writer); } } diff --git a/Assets/Scripts/Interaction/IJudgementHookObject.cs b/Assets/Scripts/Interaction/IJudgementHookObject.cs index b8fd3f2..9307a1f 100644 --- a/Assets/Scripts/Interaction/IJudgementHookObject.cs +++ b/Assets/Scripts/Interaction/IJudgementHookObject.cs @@ -10,6 +10,7 @@ namespace Demo.Game // IJudgementHookObject 配置(抽象基类Config) public class IJudgementHookObjectConfig : ScriptLoadableConfig { + public int MyInteractionModule; public override void Deserialize(BinaryReader reader) { base.Deserialize(reader); @@ -51,11 +52,10 @@ namespace Demo.Game /// /// 绑定IInteraction对象,若不手动绑定则会自动绑定到父物体的IInteraction /// - /// [Convention.RScript.Variable.Attr.Method] - public void Bind(string path) + public void Bind(IInteraction module) { - MyInteractionModule = FindWithPath(path) as IInteraction; + MyInteractionModule = module; } public override IEnumerator UnloadScript() diff --git a/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs b/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs index 2b859db..a7b85a4 100644 --- a/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs +++ b/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs @@ -3,10 +3,34 @@ using Demo.Game.Attr; using NUnit.Framework.Internal; using System.Collections; using System.Collections.Generic; +using System.IO; using UnityEngine; namespace Demo.Game { + namespace ConfigType + { + public class ParticleJudgement : IJudgementHookObjectConfig + { + public bool IsZooming; + public MathExtension.EaseCurveType ZoomCurve = MathExtension.EaseCurveType.OutCubic; + + public override void Deserialize(BinaryReader reader) + { + IsZooming = BinarySerializeUtility.ReadBool(reader); + ZoomCurve = (MathExtension.EaseCurveType)BinarySerializeUtility.ReadInt(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteBool(writer, IsZooming); + BinarySerializeUtility.WriteInt(writer, (int)ZoomCurve); + base.Serialize(writer); + } + } + } + [Scriptable] public class ParticleJudgement : IJudgementHookObject, IAssetBundleLoader { diff --git a/Assets/Scripts/LookAtAnchor.cs b/Assets/Scripts/LookAtAnchor.cs index 265f146..7bae042 100644 --- a/Assets/Scripts/LookAtAnchor.cs +++ b/Assets/Scripts/LookAtAnchor.cs @@ -19,14 +19,12 @@ namespace Demo.Game return begin; } - private readonly List LookAtCache = new(); - [Content] public int LookAtObject; [Content] public bool IsEnableUpdateEveryTick = false; protected override void UpdateData(int data) { - ScriptableObject target = LookAtCache[LookAtObject]; + ScriptableObject target = GetRoot().FindWithIndex(data); if (data != LookAtObject) { LookAtObject = data; @@ -46,7 +44,6 @@ namespace Demo.Game [Convention.RScript.Variable.Attr.Method] public void Add(float time, ScriptableObject target) { - LookAtCache.Add(target); ManualAddEntry(time, LookAtCache.Count - 1, default); } diff --git a/Assets/Scripts/MaterialUpdatement.cs b/Assets/Scripts/MaterialUpdatement.cs index 197d995..ecba5de 100644 --- a/Assets/Scripts/MaterialUpdatement.cs +++ b/Assets/Scripts/MaterialUpdatement.cs @@ -2,11 +2,37 @@ using Convention; using Demo.Game.Attr; using System.Collections; using System.Collections.Generic; +using System.IO; using UnityEngine; using UnityEngine.Rendering.LookDev; namespace Demo.Game { + namespace ConfigType + { + public class MaterialUpdatementConfig : UpdatementIntConfig + { + public string MaterialAssetBundlePath; + public string[] MaterialNames; + public int[] MaterialIndexs; + + public override void Deserialize(BinaryReader reader) + { + MaterialAssetBundlePath = BinarySerializeUtility.ReadString(reader); + MaterialNames = BinarySerializeUtility.DeserializeStringArray(reader); + MaterialIndexs = BinarySerializeUtility.DeserializeIntArray(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteString(writer, MaterialAssetBundlePath); + BinarySerializeUtility.SerializeArray(writer, MaterialNames); + BinarySerializeUtility.SerializeArray(writer, MaterialIndexs); + base.Serialize(writer); + } + } + } [Scriptable] public class MaterialUpdatement : Updatement, IAssetBundleLoader { diff --git a/Assets/Scripts/MoreSpline/PointBaseRenderer/BasicSplineRenderer.cs b/Assets/Scripts/MoreSpline/PointBaseRenderer/BasicSplineRenderer.cs index 8ea837e..8f2c5c8 100644 --- a/Assets/Scripts/MoreSpline/PointBaseRenderer/BasicSplineRenderer.cs +++ b/Assets/Scripts/MoreSpline/PointBaseRenderer/BasicSplineRenderer.cs @@ -1,21 +1,36 @@ using System; using System.Collections; +using System.IO; using Convention; using Dreamteck.Splines; +using Unity.Collections; using UnityEngine; namespace Demo.Game { - public interface IDependOnSplineRenderer + namespace ConfigType { - - } - - public static class DependOnSplineRendererUtility - { - public static BasicSplineRenderer LoadSplineRendererTool(this IDependOnSplineCore self, string path) + public class BasicSplineRendererConfig : UpdatementVec2Config { - return self.SharedInterfaceScriptObject.FindWithPath(path, true) as BasicSplineRenderer; + public int MySplineCore; + public string LinesAssetBundlePath; + public string MyDefaultMaterial; + + public override void Deserialize(BinaryReader reader) + { + MySplineCore = BinarySerializeUtility.ReadInt(reader); + LinesAssetBundlePath = BinarySerializeUtility.ReadString(reader); + MyDefaultMaterial = BinarySerializeUtility.ReadString(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteInt(writer, MySplineCore); + BinarySerializeUtility.WriteString(writer, LinesAssetBundlePath); + BinarySerializeUtility.WriteString(writer, MyDefaultMaterial); + base.Serialize(writer); + } } } @@ -94,19 +109,6 @@ namespace Demo.Game ManualAddEntry(time, new(from, to), curveType); } - [Convention.RScript.Variable.Attr.Method] - public void LoadSpline(string path) - { - this.LoadSplineTool(path); - } - - - [Convention.RScript.Variable.Attr.Method] - public void LoadSpline(SplineCore spline) - { - this.MySplineCore = spline; - } - /// /// 加载对应ab包并加载指定材质 /// diff --git a/Assets/Scripts/MoreSpline/PointBaseRenderer/SplineTubeRenderer.cs b/Assets/Scripts/MoreSpline/PointBaseRenderer/SplineTubeRenderer.cs index aaf0a95..c4b81ca 100644 --- a/Assets/Scripts/MoreSpline/PointBaseRenderer/SplineTubeRenderer.cs +++ b/Assets/Scripts/MoreSpline/PointBaseRenderer/SplineTubeRenderer.cs @@ -3,10 +3,36 @@ using Demo.Game.Attr; using Dreamteck.Splines; using System; using System.Collections; +using System.IO; using UnityEngine; namespace Demo.Game { + namespace ConfigType + { + public class SplineTubeRendererConfig : BasicSplineJustFollowConfig + { + public const bool DefaultIsDoubleSide = true; + public const int DefaultSidesCount = 12; + public bool IsDoubleSide = DefaultIsDoubleSide; + public int SidesCount = DefaultSidesCount; + + public override void Deserialize(BinaryReader reader) + { + IsDoubleSide = BinarySerializeUtility.ReadBool(reader); + SidesCount = BinarySerializeUtility.ReadInt(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteBool(writer, IsDoubleSide); + BinarySerializeUtility.WriteInt(writer, SidesCount); + base.Serialize(writer); + } + } + } + [Scriptable] public class SplineTubeRenderer : BasicSplineRenderer { diff --git a/Assets/Scripts/MoreSpline/SplineAnchor.cs b/Assets/Scripts/MoreSpline/SplineAnchor.cs index 7f29fc5..385276d 100644 --- a/Assets/Scripts/MoreSpline/SplineAnchor.cs +++ b/Assets/Scripts/MoreSpline/SplineAnchor.cs @@ -1,12 +1,42 @@ +using Convention; using Demo.Game.Attr; using System; -using System.Collections; +using System.IO; using UnityEngine; namespace Demo.Game { + namespace ConfigType + { + public class SplineAnchorConfig : ScriptLoadableConfig + { + public int MySplineCore, MySplineRenderer; + public bool isFollowPosition, isFollowRotation; + public float MySplineOffset; + public override void Deserialize(BinaryReader reader) + { + MySplineCore = BinarySerializeUtility.ReadInt(reader); + MySplineRenderer = BinarySerializeUtility.ReadInt(reader); + isFollowPosition = BinarySerializeUtility.ReadBool(reader); + isFollowRotation = BinarySerializeUtility.ReadBool(reader); + MySplineOffset = BinarySerializeUtility.ReadFloat(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteInt(writer, MySplineCore); + BinarySerializeUtility.WriteInt(writer, MySplineRenderer); + BinarySerializeUtility.WriteBool(writer, isFollowPosition); + BinarySerializeUtility.WriteBool(writer, isFollowRotation); + BinarySerializeUtility.WriteFloat(writer, MySplineOffset); + base.Serialize(writer); + } + } + } + [Scriptable] - public class SplineAnchor : ScriptableObject, IDependOnSplineCore, IDependOnSplineRenderer + public class SplineAnchor : ScriptableObject, IDependOnSplineCore { public static SplineAnchor Make() { @@ -24,16 +54,6 @@ namespace Demo.Game Updater?.Invoke(); } - /// - /// 加载并绑定到新样条线 - /// - /// 对象路径, 不存在时则立刻加载 - [Convention.RScript.Variable.Attr.Method] - public void LoadSpline(string path) - { - this.LoadSplineTool(path); - } - /// /// 必须先执行LoadSpline加载样条线 /// diff --git a/Assets/Scripts/MoreSpline/SplineCore.cs b/Assets/Scripts/MoreSpline/SplineCore.cs index 69b3968..9b7efc7 100644 --- a/Assets/Scripts/MoreSpline/SplineCore.cs +++ b/Assets/Scripts/MoreSpline/SplineCore.cs @@ -51,29 +51,14 @@ namespace Demo.Game public interface IDependOnSplineCore : IScriptableObject { SplineCore MySplineCore { get; set; } - void LoadSpline(string path); - } - - public static class DependOnSplineCoreUtility - { - public const string LoadSplineDescription = @" - -加载并绑定到新样条线 - -对象相对路径,若对象不存在则作为脚本相对路径加载 -"; - /// /// 加载并绑定到新样条线 /// - /// 对象相对路径,若对象不存在则作为脚本相对路径加载 - public static SplineCore LoadSplineTool(this IDependOnSplineCore self, string path) + /// 对象路径, 不存在时则立刻加载 + [Convention.RScript.Variable.Attr.Method] + void LoadSpline(SplineCore core) { - var spline = self.SharedInterfaceScriptObject.FindWithPath(path, false); - if (spline == null) - spline = self.SharedInterfaceScriptObject.LoadSubScript(nameof(SplineCore), new ToolFile(path).GetFilename(true), path); - self.MySplineCore = (SplineCore)spline; - return self.MySplineCore; + MySplineCore = core; } } diff --git a/Assets/Scripts/MoreSpline/SplineNode.cs b/Assets/Scripts/MoreSpline/SplineNode.cs index cc632e4..ba993c1 100644 --- a/Assets/Scripts/MoreSpline/SplineNode.cs +++ b/Assets/Scripts/MoreSpline/SplineNode.cs @@ -2,10 +2,42 @@ using Convention; using Demo.Game.Attr; using Dreamteck.Splines; using System.Collections; +using System.IO; using UnityEngine; namespace Demo.Game { + namespace ConfigType + { + public class SplineNodeConfig : ScriptLoadableConfig + { + public float NodeSize = 1; + public Color NodeColor = Color.white; + public bool IsSetupNodeRotation = false; + public Vector3 NodeRotation = Vector3.zero; + public int[] LinkSplineCores; + public override void Deserialize(BinaryReader reader) + { + NodeSize = BinarySerializeUtility.ReadFloat(reader); + NodeColor = BinarySerializeUtility.ReadColor(reader); + IsSetupNodeRotation = BinarySerializeUtility.ReadBool(reader); + NodeRotation = BinarySerializeUtility.ReadVec3(reader); + LinkSplineCores = BinarySerializeUtility.DeserializeIntArray(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteFloat(writer, NodeSize); + BinarySerializeUtility.WriteColor(writer, NodeColor); + BinarySerializeUtility.WriteBool(writer, IsSetupNodeRotation); + BinarySerializeUtility.WriteVec3(writer, NodeRotation); + BinarySerializeUtility.SerializeArray(writer, LinkSplineCores); + base.Serialize(writer); + } + } + } + [Scriptable] public class SplineNode : ScriptableObject { @@ -14,7 +46,7 @@ namespace Demo.Game public static SplineNode Make() { var node = new GameObject("", typeof(Node)).AddComponent(); - node.m_MyNode = node.GetOrAddComponent(); + node.m_MyNode = node.GetOrAddComponent(); return node; } @@ -23,14 +55,13 @@ namespace Demo.Game public Color NodeColor = Color.white; public bool IsSetupNodeRotation = false; public Vector3 NodeRotation = Vector3.zero; - public int MyNodeContent = 0; public Node MyNode => m_MyNode; public void AddTo(SplineCore core) { - MyNodeContent = core.NodeContent; + int MyNodeContent = core.NodeContent; core.MySplineComputer.SetPointColor(MyNodeContent, NodeColor); core.MySplineComputer.SetPointSize(MyNodeContent, NodeSize); core.MySplineComputer.SetPointNormal(MyNodeContent, IsSetupNodeRotation ? NodeRotation.normalized : transform.up); diff --git a/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs b/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs index c6c69fd..10dbdcd 100644 --- a/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs +++ b/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs @@ -1,13 +1,33 @@ using System; using System.Collections; +using System.IO; using Convention; using UnityEngine; namespace Demo.Game { - public abstract class BasicSplineJustFollow : Updatement + namespace ConfigType { - public SplineCore MySplineCore; + public class BasicSplineJustFollowConfig : ScriptLoadableConfig + { + public int MySplineCore; + public override void Deserialize(BinaryReader reader) + { + MySplineCore = BinarySerializeUtility.ReadInt(reader); + base.Deserialize(reader); + } + + public override void Serialize(BinaryWriter writer) + { + BinarySerializeUtility.WriteInt(writer, MySplineCore); + base.Serialize(writer); + } + } + } + + public abstract class BasicSplineJustFollow : Updatement, IDependOnSplineCore + { + public SplineCore MySplineCore { get; set; } protected override float Lerp(float begin, float end, float t) { @@ -33,15 +53,5 @@ namespace Demo.Game { ManualAddEntry(time, value, curveType); } - - /// - /// 绑定到样条线 - /// - /// 脚本位置 - [Convention.RScript.Variable.Attr.Method] - public void Load(SplineCore splineCore) - { - MySplineCore = splineCore; - } } }