时间线物体tab已更改为手动显示

This commit is contained in:
2025-12-15 16:50:38 +08:00
parent 8ed4f93e24
commit 88c15a43f2

View File

@@ -43,13 +43,14 @@ namespace Demo
public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling; public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling;
public bool IsSetObjectDisable; public bool IsSetObjectDisable;
public int UpdatePerFrame; public int UpdatePerFrame;
public int ScriptUpdateCounter;
public string ScriptName; public string ScriptName;
private string[] ChildTypes; private string[] ChildTypes;
public ScriptLoadableConfig[] childs; public ScriptLoadableConfig[] childs;
public readonly static Dictionary<string, Func<ScriptLoadableConfig>> ConfigGeneraters = new() public readonly static Dictionary<string, Func<ScriptLoadableConfig>> ConfigGeneraters = new()
{ {
{ nameof(ScriptLoadableConfig), ()=>new ScriptLoadableConfig() } { nameof(ScriptLoadableConfig), ()=>new ScriptLoadableConfig() },
}; };
public virtual void Deserialize(BinaryReader reader) public virtual void Deserialize(BinaryReader reader)
@@ -59,6 +60,7 @@ namespace Demo
EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader); EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader);
IsSetObjectDisable = BinarySerializeUtility.ReadBool(reader); IsSetObjectDisable = BinarySerializeUtility.ReadBool(reader);
UpdatePerFrame = BinarySerializeUtility.ReadInt(reader); UpdatePerFrame = BinarySerializeUtility.ReadInt(reader);
ScriptUpdateCounter = BinarySerializeUtility.ReadInt(reader);
ScriptName = BinarySerializeUtility.ReadString(reader); ScriptName = BinarySerializeUtility.ReadString(reader);
ChildTypes = BinarySerializeUtility.DeserializeStringArray(reader); ChildTypes = BinarySerializeUtility.DeserializeStringArray(reader);
int childCount = ChildTypes.Length; int childCount = ChildTypes.Length;
@@ -76,6 +78,7 @@ namespace Demo
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling); BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling);
BinarySerializeUtility.WriteBool(writer, IsSetObjectDisable); BinarySerializeUtility.WriteBool(writer, IsSetObjectDisable);
BinarySerializeUtility.WriteInt(writer, UpdatePerFrame); BinarySerializeUtility.WriteInt(writer, UpdatePerFrame);
BinarySerializeUtility.WriteInt(writer, ScriptUpdateCounter);
BinarySerializeUtility.WriteString(writer, ScriptName); BinarySerializeUtility.WriteString(writer, ScriptName);
BinarySerializeUtility.SerializeArray(writer, ChildTypes); BinarySerializeUtility.SerializeArray(writer, ChildTypes);
foreach (var child in childs) foreach (var child in childs)
@@ -777,31 +780,28 @@ namespace Demo
public static PropertiesWindow TimelineWindow; public static PropertiesWindow TimelineWindow;
private PropertiesWindow.ItemEntry MyTimelineEntry; private PropertiesWindow.ItemEntry MyTimelineEntry;
private Editor.UI.TimelineItem MyTimelineItem; private Editor.UI.TimelineItem MyTimelineItem;
//[SerializeField] private bool IsTimelineItemShow = false;
private static List<TimelineScriptObject> TimelineScriptObjectWhichOnShow = new();
private static UnityEngine.UI.Image CacheLastFocusImage; private static UnityEngine.UI.Image CacheLastFocusImage;
private static Color CacheLastFocusImageOriginColor = new(1, 1, 1, 0.01f); private static Color CacheLastFocusImageOriginColor = new(1, 1, 1, 0.01f);
private static Color FocusImageColor = new(1f, 47f / 51f, 0.0156862754f, 0.1f); private static Color FocusImageColor = new(1f, 47f / 51f, 0.0156862754f, 0.1f);
[Content, SerializeField] private bool IsEnableTimelineItem = false; public override IEnumerator UnloadScript()
[Convention.RScript.Variable.Attr.Method]
public void EnableTimelineItem()
{ {
IsEnableTimelineItem = true; yield return base.UnloadScript();
// 这里的两处判空是因为如果抛出错误就会打断了逻辑, 所以这里需要判断
if (MyTimelineItem != null)
{
MyTimelineItem.RawButton.onClick.RemoveAllListeners();
MyTimelineItem = null;
}
} }
protected override IEnumerator DoSomethingDuringApplyScript() public override void OnHierarchyItemClick(HierarchyItem item)
{ {
yield return base.DoSomethingDuringApplyScript(); if (MyTimelineEntry == null)
if (IsEnableTimelineItem)
{ {
if (MyTimelineEntry == null) MyTimelineEntry = TimelineWindow.CreateRootItemEntries(1)[0];
{ MyTimelineItem = MyTimelineEntry.ref_value.GetComponent<Editor.UI.TimelineItem>();
MyTimelineEntry = TimelineWindow.CreateRootItemEntries(1)[0];
MyTimelineItem = MyTimelineEntry.ref_value.GetComponent<Editor.UI.TimelineItem>();
}
MyTimelineItem.title = ScriptName; MyTimelineItem.title = ScriptName;
MyTimelineItem.RawButton.onClick.RemoveAllListeners(); MyTimelineItem.RawButton.onClick.RemoveAllListeners();
MyTimelineItem.AddListener(() => MyTimelineItem.AddListener(() =>
@@ -813,37 +813,20 @@ namespace Demo
CacheLastFocusImage.color = FocusImageColor; CacheLastFocusImage.color = FocusImageColor;
}); });
SetupTimelineItem(MyTimelineItem); SetupTimelineItem(MyTimelineItem);
TimelineScriptObjectWhichOnShow.Add(this);
} }
} else if (MyTimelineEntry != null)
public override IEnumerator UnloadScript()
{
yield return base.UnloadScript();
// 这里的两处判空是因为如果抛出错误就会打断了逻辑, 所以这里需要判断
if (MyTimelineItem != null)
{
MyTimelineItem.RawButton.onClick.RemoveAllListeners();
MyTimelineItem = null;
}
if (MyTimelineEntry != null)
{ {
MyTimelineEntry.Release(); MyTimelineEntry.Release();
MyTimelineEntry = null; MyTimelineEntry = null;
} }
} }
public override void OnHierarchyItemClick(HierarchyItem item)
{
}
private float UIResizeOnTimelineCount = 0; 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 (IsEnableTimelineItem) if (MyTimelineEntry != null)
{ {
if (UIResizeOnTimelineCount > 0.1 || tickType != TickType.Update) if (UIResizeOnTimelineCount > 0.1 || tickType != TickType.Update)
{ {