This commit is contained in:
parent
4366914e60
commit
ee2bdaacaf
|
|
@ -0,0 +1,170 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using DG.Tweening;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DefaultNamespace.ProcessMode
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using DG.Tweening;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DefaultNamespace.ProcessMode
|
||||||
|
{
|
||||||
|
// public class TweenWrapper
|
||||||
|
// {
|
||||||
|
// public Tween Tween { get; private set; }
|
||||||
|
// public Action OnCompleteAction { get; private set; }
|
||||||
|
//
|
||||||
|
// public TweenWrapper(Tween tween, Action onCompleteAction)
|
||||||
|
// {
|
||||||
|
// Tween = tween;
|
||||||
|
// OnCompleteAction = onCompleteAction;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void Play()
|
||||||
|
// {
|
||||||
|
// Tween.Restart();
|
||||||
|
// Tween.OnComplete(() => OnCompleteAction?.Invoke());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void Complete(bool withCallbacks = false)
|
||||||
|
// {
|
||||||
|
// if (withCallbacks && OnCompleteAction != null)
|
||||||
|
// {
|
||||||
|
// OnCompleteAction.Invoke();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public bool IsCompleted()
|
||||||
|
// {
|
||||||
|
// return Tween.IsComplete();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void Reset()
|
||||||
|
// {
|
||||||
|
// Tween.Rewind();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
public class AnimationManager : MonoBehaviour
|
||||||
|
{
|
||||||
|
private List<List<Tween>> animationGroups = new List<List<Tween>>();
|
||||||
|
private int currentGroupIndex = -1;
|
||||||
|
private int currentTweenIndex = -1;
|
||||||
|
private bool isPlaying = false;
|
||||||
|
|
||||||
|
public void AddAnimationGroup(List<Tween> group)
|
||||||
|
{
|
||||||
|
animationGroups.Add(group);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PlayAnimationGroup(int groupIndex)
|
||||||
|
{
|
||||||
|
Debug.Log($"尝试播放动画组 {groupIndex}");
|
||||||
|
|
||||||
|
if (groupIndex < 0 || groupIndex >= animationGroups.Count)
|
||||||
|
{
|
||||||
|
Debug.LogError("无效的组索引");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log("PlayAnimationGroup 调用的索引: " + groupIndex);
|
||||||
|
|
||||||
|
if (isPlaying)
|
||||||
|
{
|
||||||
|
Debug.Log("当前正在播放,将先完成当前组。");
|
||||||
|
CompleteCurrentGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (groupIndex == currentGroupIndex && animationGroups[currentGroupIndex][0].IsComplete())
|
||||||
|
{
|
||||||
|
Debug.Log("动画已完成,重新播放。");
|
||||||
|
ResetCurrentGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
currentGroupIndex = groupIndex;
|
||||||
|
currentTweenIndex = 0;
|
||||||
|
isPlaying = true;
|
||||||
|
PlayNextTween();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PlayNextTween()
|
||||||
|
{
|
||||||
|
if (currentGroupIndex < 0 || currentGroupIndex >= animationGroups.Count)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("没有有效的组可播放。");
|
||||||
|
isPlaying = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Tween> currentGroup = animationGroups[currentGroupIndex];
|
||||||
|
|
||||||
|
if (currentTweenIndex < 0 || currentTweenIndex >= currentGroup.Count)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("当前组中没有有效的动画可播放。");
|
||||||
|
isPlaying = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tween tweenWrapper = currentGroup[currentTweenIndex];
|
||||||
|
Debug.Log($"正在播放组 {currentGroupIndex} 中的动画 {currentTweenIndex}");
|
||||||
|
tweenWrapper.OnComplete(OnTweenComplete).Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnTweenComplete()
|
||||||
|
{
|
||||||
|
Debug.Log($"动画 {currentTweenIndex} 完成");
|
||||||
|
animationGroups[currentGroupIndex][currentTweenIndex].onComplete.Invoke();
|
||||||
|
currentTweenIndex++;
|
||||||
|
|
||||||
|
if (currentTweenIndex >= animationGroups[currentGroupIndex].Count)
|
||||||
|
{
|
||||||
|
Debug.Log("已完成当前组中的所有动画。");
|
||||||
|
isPlaying = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayNextTween();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CompleteCurrentGroup()
|
||||||
|
{
|
||||||
|
if (currentGroupIndex < 0 || currentGroupIndex >= animationGroups.Count)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("没有有效的组可完成。");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Tween> currentGroup = animationGroups[currentGroupIndex];
|
||||||
|
for (int i = currentTweenIndex; i < currentGroup.Count; i++)
|
||||||
|
{
|
||||||
|
Debug.Log($"正在完成组 {currentGroupIndex} 中的动画 {i}");
|
||||||
|
currentGroup[i].Complete(true);
|
||||||
|
// currentGroup[i].OnCompleteAction?.Invoke(); // 手动触发 OnCompleteAction
|
||||||
|
}
|
||||||
|
|
||||||
|
currentGroupIndex = -1;
|
||||||
|
currentTweenIndex = -1;
|
||||||
|
isPlaying = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResetCurrentGroup()
|
||||||
|
{
|
||||||
|
if (currentGroupIndex < 0 || currentGroupIndex >= animationGroups.Count)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("没有有效的组可重置。");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Tween> currentGroup = animationGroups[currentGroupIndex];
|
||||||
|
foreach (var tweenWrapper in currentGroup)
|
||||||
|
{
|
||||||
|
tweenWrapper.Rewind();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fd131cf52c804b2ea7cd1989dc2fedd7
|
||||||
|
timeCreated: 1718763357
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using DefaultNamespace.ProcessMode;
|
||||||
|
using DefaultNamespace.ProcessMode.DefaultNamespace.ProcessMode;
|
||||||
|
using DG.Tweening;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DefaultNamespace
|
||||||
|
{
|
||||||
|
public class TestAnimations : MonoBehaviour
|
||||||
|
{
|
||||||
|
private AnimationManager animationManager;
|
||||||
|
|
||||||
|
public GameObject[] ggg;
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
animationManager = gameObject.AddComponent<AnimationManager>();
|
||||||
|
|
||||||
|
List<Tween> group3 = new List<Tween>
|
||||||
|
{
|
||||||
|
transform.DOMove(new Vector3(7, 2, 0), 1).SetAutoKill(false).Pause().OnComplete(() => Debug.Log("3_1")),
|
||||||
|
transform.DOMove(new Vector3(7, 2, 0), 1).SetAutoKill(false).Pause().OnComplete(() => Debug.Log("3_1")),
|
||||||
|
transform.DOMove(new Vector3(7, 2, 0), 1).SetAutoKill(false).Pause().OnComplete(() => Debug.Log("3_1")),
|
||||||
|
};
|
||||||
|
animationManager.AddAnimationGroup(group3);
|
||||||
|
|
||||||
|
Debug.Log("开始播放第一个动画组");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
if (Input.GetKeyDown(KeyCode.A))
|
||||||
|
{
|
||||||
|
Debug.Log("按下A");
|
||||||
|
animationManager.PlayAnimationGroup(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Input.GetKeyDown(KeyCode.B))
|
||||||
|
{
|
||||||
|
Debug.Log("按下B");
|
||||||
|
animationManager.PlayAnimationGroup(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Input.GetKeyDown(KeyCode.C))
|
||||||
|
{
|
||||||
|
Debug.Log("按下空格键");
|
||||||
|
animationManager.PlayAnimationGroup(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3ada1c4df57d4cb3ad8027691b47e949
|
||||||
|
timeCreated: 1718763747
|
||||||
Loading…
Reference in New Issue