Unity DoTween 抛物线运动

最近项目有需求让游戏物体做抛物线运动使用了以下方法,

 Sequence s = DOTween.Sequence();
            //定义一共2秒的 x 轴移动
            s.Append(eff.transform.DOMoveX(position.x, 2).SetEase
### UnityDOTween 的回调函数使用方法 在 Unity 开发中,DOTween 是一款强大的动画工具插件,支持多种类型的动画操作以及丰富的扩展功能。其中,回调函数是 DOTween 提供的重要特性之一,用于在动画的不同阶段执行特定的操作。 #### 基本概念 DOTween 支持多个内置的回调函数接口,这些接口允许开发者在动画的关键时刻(如开始、完成或暂停)插入自定义逻辑。常见的回调函数包括 `OnStart`、`OnPlay`、`OnPause` 和 `OnComplete` 等[^1]。 --- #### 示例代码:使用回调函数 以下是一个完整的示例,展示如何利用 `OnComplete` 回调函数来处理动画完成后的行为: ```csharp using DG.Tweening; using UnityEngine; public class TweenCallbackExample : MonoBehaviour { public Transform target; // 被控制的游戏对象 public Vector3 destination; // 目标位置 private void Start() { // 创建一个从当前位置到目标位置的移动动画 Tween tween = DOTween.To( () => target.position, // 获取当前值的方法 x => target.position = x, // 更新值的方法 destination, // 目标值 2f // 动画持续时间 ); // 添加动画完成后的回调函数 tween.OnComplete(() => { Debug.Log("Tween animation has been completed!"); // 可在此处添加其他逻辑,比如触发下一个动画或者改变状态 }); } } ``` 上述代码实现了将指定物体从起始位置平滑移动至目标位置的功能,并在动画结束后打印日志消息。 --- #### 更多功能:设置缓动效果并绑定回调 除了基本的 `OnComplete` 外,还可以结合缓动曲线(Easing Curve)和其他回调一起使用。例如,在下面的例子中,设置了立方抛物线型的退出缓动效果,并绑定了两个不同的回调函数分别监控动画启动和结束的状态: ```csharp using DG.Tweening; using UnityEngine; public class EaseAndCallbacksExample : MonoBehaviour { public GameObject objectToMove; // 需要移动的对象 public float duration = 3f; // 动画时长 private void Start() { // 定义向右水平位移的目标距离 Tweener tweener = objectToMove.transform.DOMoveX(5, duration); // 设置缓动模式为 OutCubic 类型 tweener.SetEase(Ease.OutCubic)[^2]; // 绑定动画开始前的回调 tweener.OnStart(() => Debug.Log("Animation started.")); // 绑定动画结束后的回调 tweener.OnComplete(() => Debug.Log("Animation finished with ease-out cubic effect.")); } } ``` 此片段不仅演示了如何应用非线性的运动轨迹,还说明了多组回调可以共存于同一个 Tween 对象上。 --- #### 序列动画中的回调管理 当涉及复杂的场景需求时,可能需要用到序列化动画技术。此时可以通过 `AppendCallback` 将额外的动作附加到整个序列之后运行。如下所示: ```csharp using DG.Tweening; using UnityEngine; public class SequenceWithCallbackExample : MonoBehaviour { public Transform cubeTransform; // 方块变换组件 public float moveDuration = 0.8f; // 单次动作耗时 private void Start() { Sequence seq = DOTween.Sequence(); // 初始化一个新的序列 // 向 X 正方向移动一段固定长度 seq.Append(cubeTransform.DOMoveX(2, moveDuration)); // 插入短暂延迟后再继续下一步骤 seq.Insert(moveDuration * 1.5f, cubeTransform.DOScale(Vector3.one * 2, moveDuration / 2)); // 当全部子项都执行完毕后发出通知 seq.AppendCallback(() => Debug.Log("All animations in sequence have ended."))[^3]; } } ``` 这里构建了一个包含两部分独立变化过程的整体流程图,并最终通过追加全局级别的反馈机制告知开发人员何时彻底停止所有活动。 --- ### 总结 DOTween 的回调函数极大地增强了其灵活性与可维护性,使得复杂交互变得更加直观易懂。无论是单独使用的简单案例还是嵌套结构下的高级组合形式,都能轻松满足实际项目里的多样化诉求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值