EnergyEfficiencyManagement/Assets/Scripts/结构认知/StructuralCognition_Ani.cs

94 lines
2.3 KiB
C#

using SK.Framework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Playables;
using UnityEngine.UI;
/// <summary>
/// 结构认知动画控制
/// </summary>
public class StructuralCognition_Ani : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{
public Variables variables;
public PlayableDirector DeviceTimeLine;
/// <summary>
/// TimeLine进度条
/// </summary>
public Slider _TimelineProgress;
[Header("Settings")]
[SerializeField] private bool updateInPlayMode = true;
private bool isDragging;
public Animator[] animators;
void Start()
{
DeviceTimeLine = variables.Get<PlayableDirector>("TimeLine动画");
_TimelineProgress = variables.Get<Slider>("动画节点滑动条");
Freeze();
// 确保 duration 有值
DeviceTimeLine.Evaluate();
//director.Play();
_TimelineProgress.minValue = 0f;
_TimelineProgress.maxValue = (float)DeviceTimeLine.duration;
_TimelineProgress.wholeNumbers = false;
_TimelineProgress.onValueChanged.AddListener(OnSliderValueChanged);
_TimelineProgress.onValueChanged.AddListener((Value) =>
{
});
}
void Update()
{
// Timeline → Slider
if (!isDragging && DeviceTimeLine.state == PlayState.Playing)
{
_TimelineProgress.value = (float)DeviceTimeLine.time;
}
}
public void Freeze()
{
foreach (var animator in animators)
{
if (animator != null)
animator.speed = 0f;
}
}
public void Resume()
{
foreach (var animator in animators)
{
if (animator != null)
animator.speed = 1f;
}
}
void OnSliderValueChanged(float value)
{
if (!isDragging)
return;
// Slider → Timeline
DeviceTimeLine.time = value;
DeviceTimeLine.Evaluate();
}
public void OnBeginDrag(PointerEventData eventData)
{
isDragging = true;
DeviceTimeLine.Pause();
Freeze();
}
public void OnEndDrag(PointerEventData eventData)
{
isDragging = false;
DeviceTimeLine.time = _TimelineProgress.value;
DeviceTimeLine.Evaluate();
DeviceTimeLine.Play();
Resume();
}
}