推动Config新增
This commit is contained in:
Submodule Assets/Convention updated: a530eba460...fd68071416
@@ -1,8 +1,10 @@
|
|||||||
using Convention;
|
using Convention;
|
||||||
using Demo.Game.Attr;
|
using Demo.Game.Attr;
|
||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
namespace Demo.Game
|
||||||
@@ -11,15 +13,31 @@ namespace Demo.Game
|
|||||||
{
|
{
|
||||||
public class PrefabRootObjectConfig : ScriptLoadableConfig
|
public class PrefabRootObjectConfig : ScriptLoadableConfig
|
||||||
{
|
{
|
||||||
private readonly Dictionary<string, List<string>> LoadedGameObjectNames = new();
|
public Dictionary<string, string[]> LoadedGameObjectNames = new();
|
||||||
|
|
||||||
public override void Deserialize(BinaryReader reader)
|
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);
|
base.Deserialize(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Serialize(BinaryWriter writer)
|
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);
|
base.Serialize(writer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,38 @@ using Convention;
|
|||||||
using Demo.Game.Attr;
|
using Demo.Game.Attr;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using Unity.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
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]
|
[Scriptable]
|
||||||
public class SkyUpdatement : Updatement<int>, IAssetBundleLoader
|
public class SkyUpdatement : Updatement<int>, IAssetBundleLoader
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,9 +7,58 @@ using Cinemachine;
|
|||||||
using Convention.WindowsUI.Variant;
|
using Convention.WindowsUI.Variant;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Demo.Game.Attr;
|
using Demo.Game.Attr;
|
||||||
|
using System.IO;
|
||||||
|
using Convention;
|
||||||
|
|
||||||
namespace Demo.Game
|
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))]
|
[Scriptable(nameof(MakeCameraObject))]
|
||||||
public class CameraObject : ScriptableObject
|
public class CameraObject : ScriptableObject
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -231,16 +231,26 @@ namespace Demo.Game
|
|||||||
yield break;
|
yield break;
|
||||||
}
|
}
|
||||||
yield return Foo(rootGameObject.ParseFromScriptFile2Expr(rootObject));//ConventionUtility.AvoidFakeStop(rootGameObject.ParseFromScriptFile2Expr(rootObject));
|
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)
|
foreach (var child in current.Childs)
|
||||||
{
|
{
|
||||||
NDFS(child);
|
NDFS(child);
|
||||||
}
|
}
|
||||||
if (current.IsScriptApply == false)
|
if (current.IsScriptApply == false)
|
||||||
ConventionUtility.StartCoroutine(current.ApplyScript());
|
{
|
||||||
|
applyDownCount++;
|
||||||
|
IEnumerator NDFSFoo()
|
||||||
|
{
|
||||||
|
yield return current.ApplyScript();
|
||||||
|
applyDownCount--;
|
||||||
|
}
|
||||||
|
ConventionUtility.StartCoroutine(NDFSFoo());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
NDFS(rootGameObject);
|
NDFS(rootGameObject);
|
||||||
|
yield return new WaitUntil(() => applyDownCount == 0);
|
||||||
float loadRootObjectEndTime = Time.realtimeSinceStartup;
|
float loadRootObjectEndTime = Time.realtimeSinceStartup;
|
||||||
float loadRootObjectElapsed = (loadRootObjectEndTime - loadRootObjectStartTime) * 1000f;
|
float loadRootObjectElapsed = (loadRootObjectEndTime - loadRootObjectStartTime) * 1000f;
|
||||||
Debug.Log($"[GameInit] Load Root Object 耗时: {loadRootObjectElapsed:F2} ms", this);
|
Debug.Log($"[GameInit] Load Root Object 耗时: {loadRootObjectElapsed:F2} ms", this);
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ using Convention.WindowsUI.Variant;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.InputSystem;
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
@@ -16,8 +18,56 @@ namespace Demo.Game
|
|||||||
|
|
||||||
[Content] public GameController RootGameController;
|
[Content] public GameController RootGameController;
|
||||||
|
|
||||||
public string SourcePath;
|
[Setting]public string SourcePath;
|
||||||
public HashSet<string> LoadedScriptSet = new();
|
[Header("GlobalConfig")]
|
||||||
|
public readonly HashSet<string> LoadedScriptSet = new();
|
||||||
|
public readonly Dictionary<int, ScriptableObject> LoadedScriptIndex = new();
|
||||||
|
public readonly Dictionary<ScriptableObject, int> LoadedScriptRIndex = new();
|
||||||
|
private int LoadedScriptCnt = 0;
|
||||||
|
/// <summary>
|
||||||
|
/// 被用于自动生成
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public int PushLoadedScriptObject(ScriptableObject obj)
|
||||||
|
{
|
||||||
|
while (LoadedScriptIndex.TryAdd(LoadedScriptCnt, obj) == false)
|
||||||
|
LoadedScriptCnt++;
|
||||||
|
LoadedScriptRIndex.Add(obj, LoadedScriptCnt);
|
||||||
|
return LoadedScriptCnt++;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 被用于从缓存中生成
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
/// <param name="index"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public int PushLoadedScriptObject(ScriptableObject obj, int index)
|
||||||
|
{
|
||||||
|
LoadedScriptIndex.Add(index, obj);
|
||||||
|
LoadedScriptRIndex.Add(obj, index);
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 通过序列号获得物体
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="index"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ScriptableObject FindWithIndex(int index)
|
||||||
|
{
|
||||||
|
if(index<0)
|
||||||
|
return null;
|
||||||
|
return LoadedScriptIndex[index];
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 通过物体获得序列号
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
/// <returns>若无法找到将返回-1</returns>
|
||||||
|
public int FindIndex(ScriptableObject obj)
|
||||||
|
{
|
||||||
|
return LoadedScriptRIndex.TryGetValue(obj, out var index) ? index : -1;
|
||||||
|
}
|
||||||
|
|
||||||
protected override IEnumerator DoSomethingDuringApplyScript()
|
protected override IEnumerator DoSomethingDuringApplyScript()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ namespace Demo.Game
|
|||||||
{
|
{
|
||||||
public class ScriptLoadableConfig
|
public class ScriptLoadableConfig
|
||||||
{
|
{
|
||||||
|
public int UID = -1;
|
||||||
public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling;
|
public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling;
|
||||||
public bool IsSetObjectDisable;
|
public bool IsSetObjectDisable;
|
||||||
public int UpdatePerFrame;
|
public int UpdatePerFrame;
|
||||||
@@ -51,6 +52,7 @@ namespace Demo.Game
|
|||||||
|
|
||||||
public virtual void Deserialize(BinaryReader reader)
|
public virtual void Deserialize(BinaryReader reader)
|
||||||
{
|
{
|
||||||
|
UID = BinarySerializeUtility.ReadInt(reader);
|
||||||
EnterGameLocalPosition = BinarySerializeUtility.ReadVec3(reader);
|
EnterGameLocalPosition = BinarySerializeUtility.ReadVec3(reader);
|
||||||
EnterGameEulerAngles = BinarySerializeUtility.ReadVec3(reader);
|
EnterGameEulerAngles = BinarySerializeUtility.ReadVec3(reader);
|
||||||
EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader);
|
EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader);
|
||||||
@@ -69,6 +71,7 @@ namespace Demo.Game
|
|||||||
}
|
}
|
||||||
public virtual void Serialize(BinaryWriter writer)
|
public virtual void Serialize(BinaryWriter writer)
|
||||||
{
|
{
|
||||||
|
BinarySerializeUtility.WriteInt(writer, UID);
|
||||||
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalPosition);
|
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalPosition);
|
||||||
BinarySerializeUtility.WriteVec3(writer, EnterGameEulerAngles);
|
BinarySerializeUtility.WriteVec3(writer, EnterGameEulerAngles);
|
||||||
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling);
|
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling);
|
||||||
@@ -223,6 +226,7 @@ namespace Demo.Game
|
|||||||
public ScriptableObject Parent;
|
public ScriptableObject Parent;
|
||||||
public readonly List<ScriptableObject> Childs = new();
|
public readonly List<ScriptableObject> Childs = new();
|
||||||
|
|
||||||
|
private RootObject rootObjectCache = null;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取根脚本对象
|
/// 获取根脚本对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -230,12 +234,16 @@ namespace Demo.Game
|
|||||||
[Convention.RScript.Variable.Attr.Method]
|
[Convention.RScript.Variable.Attr.Method]
|
||||||
public RootObject GetRoot()
|
public RootObject GetRoot()
|
||||||
{
|
{
|
||||||
if (Parent == null)
|
if (rootObjectCache == null)
|
||||||
return this as RootObject;
|
{
|
||||||
if (Parent is RootObject result)
|
if (Parent == null)
|
||||||
return result;
|
rootObjectCache = this as RootObject;
|
||||||
else
|
if (Parent is RootObject result)
|
||||||
return Parent.GetRoot();
|
rootObjectCache = result;
|
||||||
|
else
|
||||||
|
rootObjectCache = Parent.GetRoot();
|
||||||
|
}
|
||||||
|
return rootObjectCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -334,6 +342,7 @@ namespace Demo.Game
|
|||||||
|
|
||||||
isEnableScript = true;
|
isEnableScript = true;
|
||||||
// 只有RootObject的parent会是空的
|
// 只有RootObject的parent会是空的
|
||||||
|
GetRoot().PushLoadedScriptObject(this);
|
||||||
if (parent != null)
|
if (parent != null)
|
||||||
{
|
{
|
||||||
MyHierarchyItem = parent.MyHierarchyItem.GetHierarchyItem().CreateSubPropertyItem(1)[0];
|
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)
|
protected override void UpdateTicks(float currentTime, float deltaTime, TickType tickType)
|
||||||
{
|
{
|
||||||
base.UpdateTicks(currentTime, deltaTime, tickType);
|
base.UpdateTicks(currentTime, deltaTime, tickType);
|
||||||
// 存在严重的性能开销, 在解决之前将不会允许其快速自动更新
|
|
||||||
if (MyTimelineEntry != null)
|
if (MyTimelineEntry != null)
|
||||||
{
|
{
|
||||||
if (UIResizeOnTimelineCount > 0.1 || tickType != TickType.Update)
|
MyTimelineItem.ResizeOnTimeline();
|
||||||
{
|
|
||||||
UIResizeOnTimelineCount = 0;
|
|
||||||
MyTimelineItem.ResizeOnTimeline();
|
|
||||||
}
|
|
||||||
UIResizeOnTimelineCount += deltaTime;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,12 +55,12 @@ namespace Demo.Game
|
|||||||
|
|
||||||
public class UpdatementIntConfig : UpdatementConfig<int>
|
public class UpdatementIntConfig : UpdatementConfig<int>
|
||||||
{
|
{
|
||||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<int> positions)
|
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<int> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<int> positions)
|
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<int> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||||
}
|
}
|
||||||
@@ -68,12 +68,12 @@ namespace Demo.Game
|
|||||||
|
|
||||||
public class UpdatementFloatConfig : UpdatementConfig<float>
|
public class UpdatementFloatConfig : UpdatementConfig<float>
|
||||||
{
|
{
|
||||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<float> positions)
|
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<float> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<float> positions)
|
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<float> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||||
}
|
}
|
||||||
@@ -81,12 +81,12 @@ namespace Demo.Game
|
|||||||
|
|
||||||
public class UpdatementVec2Config : UpdatementConfig<Vector2>
|
public class UpdatementVec2Config : UpdatementConfig<Vector2>
|
||||||
{
|
{
|
||||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<Vector2> positions)
|
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<Vector2> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<Vector2> positions)
|
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<Vector2> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||||
}
|
}
|
||||||
@@ -94,12 +94,12 @@ namespace Demo.Game
|
|||||||
|
|
||||||
public class UpdatementVec3Config : UpdatementConfig<Vector3>
|
public class UpdatementVec3Config : UpdatementConfig<Vector3>
|
||||||
{
|
{
|
||||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<Vector3> positions)
|
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<Vector3> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<Vector3> positions)
|
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<Vector3> positions)
|
||||||
{
|
{
|
||||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,47 @@
|
|||||||
using Convention;
|
using Convention;
|
||||||
using Demo.Game.Attr;
|
using Demo.Game.Attr;
|
||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
namespace Demo.Game
|
||||||
{
|
{
|
||||||
|
namespace ConfigType
|
||||||
|
{
|
||||||
|
public class ParticleEffectConfig : IEffectHookObjectConfig
|
||||||
|
{
|
||||||
|
public Dictionary<string, string[]> 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]
|
[Scriptable]
|
||||||
public class ParticleEffect : IEffectHookObject, IAssetBundleLoader
|
public class ParticleEffect : IEffectHookObject, IAssetBundleLoader
|
||||||
{
|
{
|
||||||
@@ -15,15 +50,14 @@ namespace Demo.Game
|
|||||||
return new GameObject().AddComponent<ParticleEffect>();
|
return new GameObject().AddComponent<ParticleEffect>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<string,bool> AssetBundleLoaders = new();
|
private int AssetBundleLoadingCounter = 0;
|
||||||
private readonly List<string> AssetBundles = new();
|
private readonly Dictionary<string,List<string>> AssetBundles = new();
|
||||||
private readonly List<GameObject> Prefabs = new();
|
private readonly List<GameObject> Prefabs = new();
|
||||||
|
|
||||||
protected override IEnumerator DoSomethingDuringApplyScript()
|
protected override IEnumerator DoSomethingDuringApplyScript()
|
||||||
{
|
{
|
||||||
yield return base.DoSomethingDuringApplyScript();
|
yield return base.DoSomethingDuringApplyScript();
|
||||||
while (AssetBundleLoaders.Any(x => x.Value == false))
|
yield return new WaitUntil(() => AssetBundleLoadingCounter == 0);
|
||||||
yield return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerator UnloadScript()
|
public override IEnumerator UnloadScript()
|
||||||
@@ -31,7 +65,7 @@ namespace Demo.Game
|
|||||||
yield return base.UnloadScript();
|
yield return base.UnloadScript();
|
||||||
foreach (var ab in AssetBundles)
|
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]
|
[Convention.RScript.Variable.Attr.Method]
|
||||||
public void Load(string ab, string prefab)
|
public void Load(string ab, string prefab)
|
||||||
{
|
{
|
||||||
AssetBundleLoaders.TryAdd(ab, false);
|
AssetBundleLoadingCounter++;
|
||||||
ConventionUtility.StartCoroutine(this.LoadAssetBundle(ab, x =>
|
ConventionUtility.StartCoroutine(this.LoadAssetBundle(ab, x =>
|
||||||
{
|
{
|
||||||
GameObject sub = Instantiate(x.LoadAsset<GameObject>(prefab));
|
GameObject sub = Instantiate(x.LoadAsset<GameObject>(prefab));
|
||||||
@@ -51,8 +85,10 @@ namespace Demo.Game
|
|||||||
Prefabs.Add(sub);
|
Prefabs.Add(sub);
|
||||||
sub.transform.SetParent(transform);
|
sub.transform.SetParent(transform);
|
||||||
sub.transform.localPosition = Vector3.zero;
|
sub.transform.localPosition = Vector3.zero;
|
||||||
AssetBundles.Add(ab);
|
if(AssetBundles.ContainsKey(ab)==false)
|
||||||
AssetBundleLoaders[ab] = true;
|
AssetBundles.Add(ab, new());
|
||||||
|
AssetBundles[ab].Add(prefab);
|
||||||
|
AssetBundleLoadingCounter--;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,16 +11,19 @@ namespace Demo.Game
|
|||||||
// IEffectHookObject 配置(抽象基类Config)
|
// IEffectHookObject 配置(抽象基类Config)
|
||||||
public class IEffectHookObjectConfig : ScriptLoadableConfig
|
public class IEffectHookObjectConfig : ScriptLoadableConfig
|
||||||
{
|
{
|
||||||
|
public int MyInteractionModule;
|
||||||
public IEffectHookObject.InteractiveEffectType MyInteractiveLevel;
|
public IEffectHookObject.InteractiveEffectType MyInteractiveLevel;
|
||||||
|
|
||||||
public override void Deserialize(BinaryReader reader)
|
public override void Deserialize(BinaryReader reader)
|
||||||
{
|
{
|
||||||
|
MyInteractionModule = BinarySerializeUtility.ReadInt(reader);
|
||||||
MyInteractiveLevel = (IEffectHookObject.InteractiveEffectType)BinarySerializeUtility.ReadInt(reader);
|
MyInteractiveLevel = (IEffectHookObject.InteractiveEffectType)BinarySerializeUtility.ReadInt(reader);
|
||||||
base.Deserialize(reader);
|
base.Deserialize(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Serialize(BinaryWriter writer)
|
public override void Serialize(BinaryWriter writer)
|
||||||
{
|
{
|
||||||
|
BinarySerializeUtility.WriteInt(writer, MyInteractionModule);
|
||||||
BinarySerializeUtility.WriteInt(writer, (int)MyInteractiveLevel);
|
BinarySerializeUtility.WriteInt(writer, (int)MyInteractiveLevel);
|
||||||
base.Serialize(writer);
|
base.Serialize(writer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,15 +10,12 @@ namespace Demo.Game
|
|||||||
{
|
{
|
||||||
namespace ConfigType
|
namespace ConfigType
|
||||||
{
|
{
|
||||||
// IInteraction 配置(抽象基类Config,继承自TimelineScriptObject)
|
|
||||||
public class IInteractionConfig : ScriptLoadableConfig
|
public class IInteractionConfig : ScriptLoadableConfig
|
||||||
{
|
{
|
||||||
public Vector2 VisibleDuration;
|
public Vector2 VisibleDuration;
|
||||||
public Vector2 InteractiveDuration;
|
public Vector2 InteractiveDuration;
|
||||||
public Vector2 InteractableScoreInterval;
|
public Vector2 InteractableScoreInterval;
|
||||||
public Vector2 InteractableIntervalThatCanScoreBest;
|
public Vector2 InteractableIntervalThatCanScoreBest;
|
||||||
public IInteraction.JudgementLevel MyJudgementLevel;
|
|
||||||
public IInteraction.UpdatePhase MyUpdatePhase;
|
|
||||||
|
|
||||||
public override void Deserialize(BinaryReader reader)
|
public override void Deserialize(BinaryReader reader)
|
||||||
{
|
{
|
||||||
@@ -26,8 +23,6 @@ namespace Demo.Game
|
|||||||
InteractiveDuration = BinarySerializeUtility.ReadVec2(reader);
|
InteractiveDuration = BinarySerializeUtility.ReadVec2(reader);
|
||||||
InteractableScoreInterval = BinarySerializeUtility.ReadVec2(reader);
|
InteractableScoreInterval = BinarySerializeUtility.ReadVec2(reader);
|
||||||
InteractableIntervalThatCanScoreBest = BinarySerializeUtility.ReadVec2(reader);
|
InteractableIntervalThatCanScoreBest = BinarySerializeUtility.ReadVec2(reader);
|
||||||
MyJudgementLevel = (IInteraction.JudgementLevel)BinarySerializeUtility.ReadInt(reader);
|
|
||||||
MyUpdatePhase = (IInteraction.UpdatePhase)BinarySerializeUtility.ReadInt(reader);
|
|
||||||
base.Deserialize(reader);
|
base.Deserialize(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,8 +32,6 @@ namespace Demo.Game
|
|||||||
BinarySerializeUtility.WriteVec2(writer, InteractiveDuration);
|
BinarySerializeUtility.WriteVec2(writer, InteractiveDuration);
|
||||||
BinarySerializeUtility.WriteVec2(writer, InteractableScoreInterval);
|
BinarySerializeUtility.WriteVec2(writer, InteractableScoreInterval);
|
||||||
BinarySerializeUtility.WriteVec2(writer, InteractableIntervalThatCanScoreBest);
|
BinarySerializeUtility.WriteVec2(writer, InteractableIntervalThatCanScoreBest);
|
||||||
BinarySerializeUtility.WriteInt(writer, (int)MyJudgementLevel);
|
|
||||||
BinarySerializeUtility.WriteInt(writer, (int)MyUpdatePhase);
|
|
||||||
base.Serialize(writer);
|
base.Serialize(writer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace Demo.Game
|
|||||||
// IJudgementHookObject 配置(抽象基类Config)
|
// IJudgementHookObject 配置(抽象基类Config)
|
||||||
public class IJudgementHookObjectConfig : ScriptLoadableConfig
|
public class IJudgementHookObjectConfig : ScriptLoadableConfig
|
||||||
{
|
{
|
||||||
|
public int MyInteractionModule;
|
||||||
public override void Deserialize(BinaryReader reader)
|
public override void Deserialize(BinaryReader reader)
|
||||||
{
|
{
|
||||||
base.Deserialize(reader);
|
base.Deserialize(reader);
|
||||||
@@ -51,11 +52,10 @@ namespace Demo.Game
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 绑定IInteraction对象,若不手动绑定则会自动绑定到父物体的IInteraction
|
/// 绑定IInteraction对象,若不手动绑定则会自动绑定到父物体的IInteraction
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path"></param>
|
|
||||||
[Convention.RScript.Variable.Attr.Method]
|
[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()
|
public override IEnumerator UnloadScript()
|
||||||
|
|||||||
@@ -3,10 +3,34 @@ using Demo.Game.Attr;
|
|||||||
using NUnit.Framework.Internal;
|
using NUnit.Framework.Internal;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
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]
|
[Scriptable]
|
||||||
public class ParticleJudgement : IJudgementHookObject, IAssetBundleLoader
|
public class ParticleJudgement : IJudgementHookObject, IAssetBundleLoader
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,14 +19,12 @@ namespace Demo.Game
|
|||||||
return begin;
|
return begin;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<ScriptableObject> LookAtCache = new();
|
|
||||||
|
|
||||||
[Content] public int LookAtObject;
|
[Content] public int LookAtObject;
|
||||||
[Content] public bool IsEnableUpdateEveryTick = false;
|
[Content] public bool IsEnableUpdateEveryTick = false;
|
||||||
|
|
||||||
protected override void UpdateData(int data)
|
protected override void UpdateData(int data)
|
||||||
{
|
{
|
||||||
ScriptableObject target = LookAtCache[LookAtObject];
|
ScriptableObject target = GetRoot().FindWithIndex(data);
|
||||||
if (data != LookAtObject)
|
if (data != LookAtObject)
|
||||||
{
|
{
|
||||||
LookAtObject = data;
|
LookAtObject = data;
|
||||||
@@ -46,7 +44,6 @@ 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)
|
||||||
{
|
{
|
||||||
LookAtCache.Add(target);
|
|
||||||
ManualAddEntry(time, LookAtCache.Count - 1, default);
|
ManualAddEntry(time, LookAtCache.Count - 1, default);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,37 @@ using Convention;
|
|||||||
using Demo.Game.Attr;
|
using Demo.Game.Attr;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering.LookDev;
|
using UnityEngine.Rendering.LookDev;
|
||||||
|
|
||||||
namespace Demo.Game
|
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]
|
[Scriptable]
|
||||||
public class MaterialUpdatement : Updatement<int>, IAssetBundleLoader
|
public class MaterialUpdatement : Updatement<int>, IAssetBundleLoader
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,21 +1,36 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
using Convention;
|
using Convention;
|
||||||
using Dreamteck.Splines;
|
using Dreamteck.Splines;
|
||||||
|
using Unity.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
namespace Demo.Game
|
||||||
{
|
{
|
||||||
public interface IDependOnSplineRenderer
|
namespace ConfigType
|
||||||
{
|
{
|
||||||
|
public class BasicSplineRendererConfig : UpdatementVec2Config
|
||||||
}
|
|
||||||
|
|
||||||
public static class DependOnSplineRendererUtility
|
|
||||||
{
|
|
||||||
public static BasicSplineRenderer LoadSplineRendererTool(this IDependOnSplineCore self, string path)
|
|
||||||
{
|
{
|
||||||
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);
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载对应ab包并加载指定材质
|
/// 加载对应ab包并加载指定材质
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -3,10 +3,36 @@ using Demo.Game.Attr;
|
|||||||
using Dreamteck.Splines;
|
using Dreamteck.Splines;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
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]
|
[Scriptable]
|
||||||
public class SplineTubeRenderer : BasicSplineRenderer<TubeGenerator>
|
public class SplineTubeRenderer : BasicSplineRenderer<TubeGenerator>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,42 @@
|
|||||||
|
using Convention;
|
||||||
using Demo.Game.Attr;
|
using Demo.Game.Attr;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
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]
|
[Scriptable]
|
||||||
public class SplineAnchor : ScriptableObject, IDependOnSplineCore, IDependOnSplineRenderer
|
public class SplineAnchor : ScriptableObject, IDependOnSplineCore
|
||||||
{
|
{
|
||||||
public static SplineAnchor Make()
|
public static SplineAnchor Make()
|
||||||
{
|
{
|
||||||
@@ -24,16 +54,6 @@ namespace Demo.Game
|
|||||||
Updater?.Invoke();
|
Updater?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 加载并绑定到新样条线
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="path">对象路径, 不存在时则立刻加载</param>
|
|
||||||
[Convention.RScript.Variable.Attr.Method]
|
|
||||||
public void LoadSpline(string path)
|
|
||||||
{
|
|
||||||
this.LoadSplineTool(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 必须先执行LoadSpline加载样条线
|
/// 必须先执行LoadSpline加载样条线
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -51,29 +51,14 @@ namespace Demo.Game
|
|||||||
public interface IDependOnSplineCore : IScriptableObject
|
public interface IDependOnSplineCore : IScriptableObject
|
||||||
{
|
{
|
||||||
SplineCore MySplineCore { get; set; }
|
SplineCore MySplineCore { get; set; }
|
||||||
void LoadSpline(string path);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class DependOnSplineCoreUtility
|
|
||||||
{
|
|
||||||
public const string LoadSplineDescription = @"
|
|
||||||
<summary>
|
|
||||||
加载并绑定到新样条线
|
|
||||||
</summary>
|
|
||||||
<param name=""path"">对象相对路径,若对象不存在则作为脚本相对路径加载</param>
|
|
||||||
";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载并绑定到新样条线
|
/// 加载并绑定到新样条线
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">对象相对路径,若对象不存在则作为脚本相对路径加载</param>
|
/// <param name="path">对象路径, 不存在时则立刻加载</param>
|
||||||
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);
|
MySplineCore = core;
|
||||||
if (spline == null)
|
|
||||||
spline = self.SharedInterfaceScriptObject.LoadSubScript(nameof(SplineCore), new ToolFile(path).GetFilename(true), path);
|
|
||||||
self.MySplineCore = (SplineCore)spline;
|
|
||||||
return self.MySplineCore;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,42 @@ using Convention;
|
|||||||
using Demo.Game.Attr;
|
using Demo.Game.Attr;
|
||||||
using Dreamteck.Splines;
|
using Dreamteck.Splines;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
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]
|
[Scriptable]
|
||||||
public class SplineNode : ScriptableObject
|
public class SplineNode : ScriptableObject
|
||||||
{
|
{
|
||||||
@@ -14,7 +46,7 @@ namespace Demo.Game
|
|||||||
public static SplineNode Make()
|
public static SplineNode Make()
|
||||||
{
|
{
|
||||||
var node = new GameObject("", typeof(Node)).AddComponent<SplineNode>();
|
var node = new GameObject("", typeof(Node)).AddComponent<SplineNode>();
|
||||||
node.m_MyNode = node.GetOrAddComponent<Node>();
|
node.m_MyNode = node.GetOrAddComponent<Node>();
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,14 +55,13 @@ namespace Demo.Game
|
|||||||
public Color NodeColor = Color.white;
|
public Color NodeColor = Color.white;
|
||||||
public bool IsSetupNodeRotation = false;
|
public bool IsSetupNodeRotation = false;
|
||||||
public Vector3 NodeRotation = Vector3.zero;
|
public Vector3 NodeRotation = Vector3.zero;
|
||||||
public int MyNodeContent = 0;
|
|
||||||
|
|
||||||
|
|
||||||
public Node MyNode => m_MyNode;
|
public Node MyNode => m_MyNode;
|
||||||
|
|
||||||
public void AddTo(SplineCore core)
|
public void AddTo(SplineCore core)
|
||||||
{
|
{
|
||||||
MyNodeContent = core.NodeContent;
|
int MyNodeContent = core.NodeContent;
|
||||||
core.MySplineComputer.SetPointColor(MyNodeContent, NodeColor);
|
core.MySplineComputer.SetPointColor(MyNodeContent, NodeColor);
|
||||||
core.MySplineComputer.SetPointSize(MyNodeContent, NodeSize);
|
core.MySplineComputer.SetPointSize(MyNodeContent, NodeSize);
|
||||||
core.MySplineComputer.SetPointNormal(MyNodeContent, IsSetupNodeRotation ? NodeRotation.normalized : transform.up);
|
core.MySplineComputer.SetPointNormal(MyNodeContent, IsSetupNodeRotation ? NodeRotation.normalized : transform.up);
|
||||||
|
|||||||
@@ -1,13 +1,33 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
using Convention;
|
using Convention;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Demo.Game
|
namespace Demo.Game
|
||||||
{
|
{
|
||||||
public abstract class BasicSplineJustFollow : Updatement<float>
|
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<float>, IDependOnSplineCore
|
||||||
|
{
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
@@ -33,15 +53,5 @@ namespace Demo.Game
|
|||||||
{
|
{
|
||||||
ManualAddEntry(time, value, curveType);
|
ManualAddEntry(time, value, curveType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 绑定到样条线
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="path">脚本位置</param>
|
|
||||||
[Convention.RScript.Variable.Attr.Method]
|
|
||||||
public void Load(SplineCore splineCore)
|
|
||||||
{
|
|
||||||
MySplineCore = splineCore;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user