#unity/日常积累 在 Unity 的动画插件 **DoTween** 中,`Append` 和 `Join` 是用于 **组合多个 Tweens** 的方法,主要通过 **Sequence** 来管理它们的执行顺序和时间关系。两者的区别主要在于它们如何处理时间线的叠加。 ### **1. `Append` 的作用** - **将 Tween 添加到序列的末尾,并依次执行。** - 当使用 `Append` 方法时,新的 Tween 会在当前 Sequence 时间线的末尾执行。它会延续序列的时间线。 #### **使用场景** 用于 **按顺序执行动画**。比如,移动后旋转,再缩放。 #### **示例** ``` cs Sequence sequence = DOTween.Sequence(); // 第一步:将物体移动到 (3, 0, 0) sequence.Append(transform.DOMove(new Vector3(3, 0, 0), 1f)); // 第二步:旋转物体 90 度(在第一步结束后开始) sequence.Append(transform.DORotate(new Vector3(0, 90, 0), 1f)); // 第三步:缩放物体(在第二步结束后开始) sequence.Append(transform.DOScale(new Vector3(2, 2, 2), 1f)); ``` #### **效果** - 1 秒后移动完成。 - 接着开始旋转,旋转持续 1 秒。 - 然后缩放,缩放持续 1 秒。 --- ### **2. `Join` 的作用** - **将 Tween 与当前 Sequence 的时间线并行执行。** - 当使用 `Join` 方法时,新的 Tween 会与时间线中当前的 Tween **同时执行**。 #### **使用场景** 用于 **同时执行多个动画**。比如,边移动边缩放。 #### **示例** ``` cs Sequence sequence = DOTween.Sequence(); // 第一步:将物体移动到 (3, 0, 0) sequence.Append(transform.DOMove(new Vector3(3, 0, 0), 1f)); // 第二步:在移动时,同时缩放物体 sequence.Join(transform.DOScale(new Vector3(2, 2, 2), 1f)); ``` #### **效果** - 移动和缩放会同时开始,持续 1 秒。 ### **3. `Append` 和 `Join` 的对比** ![[Pasted image 20241129100348.png]] ### **4. 综合示例** 结合 `Append` 和 `Join`,可以创建复杂的动画。 ``` cs Sequence sequence = DOTween.Sequence(); // 第一步:物体移动到 (3, 0, 0) sequence.Append(transform.DOMove(new Vector3(3, 0, 0), 1f)); // 第二步:在移动完成后,旋转物体(单独执行) sequence.Append(transform.DORotate(new Vector3(0, 90, 0), 1f)); // 第三步:在旋转时,同时改变颜色和缩放 sequence.Join(transform.DOScale(new Vector3(2, 2, 2), 1f)); sequence.Join(GetComponent().material.DOColor(Color.red, 1f)); ``` #### **效果** - 物体先移动(持续 1 秒)。 - 移动完成后,开始旋转(持续 1 秒)。 - 在旋转的同时,颜色变为红色,同时缩放为 2 倍大小。 --- ### **总结** - **`Append`**:顺序动画,用于让动画一个接一个地执行。 - **`Join`**:并行动画,用于让动画同时执行。 两者搭配使用,可以创建非常复杂且流畅的动画序列!