Unity3d使用DOTween实现动态路径方法DOPath和DOTweenPath无效情况


有个项目有如题的需求,主要是能给对象动态的设定路径,并执行延路径运动的动画。路径上的点是动态生成的,而且路径可能不唯一。

方案一、DOTweenPath

想当然的想到了DOTweenPath,路径和路径点是可以预编辑的,想着在运行中动态的设置路径就能完成。

设定DOTweenPath的path然后DOPlay:

using UnityEngine;
using DG.Tweening;
public class PathTest : MonoBehaviour
{
    public DOTweenPath dopath;
    Vector3[] wps = new Vector3[3] { new Vector3(0, 0, 0), new Vector3(3, 0, 0), new Vector3(3, 0, 3) };
    void Update()
    {
        if (Input.GetKeyUp(KeyCode.D)) 
            DoMovePath();
    }

    void DoMovePath() {
        dopath.path = new DG.Tweening.Plugins.Core.PathCore.Path(PathType.Linear, wps, 1);
        dopath.DOPlay();
    }
}

然而对象根本不会动,原因不详。

尝试打Log看看

void Update()
    {
        if (Input.GetKeyUp(KeyCode.D)) {
            DoMovePath();
            Debug.Log("按了D键");
        }
    }

    void DoMovePath() {
        dopath.path = new DG.Tweening.Plugins.Core.PathCore.Path(PathType.Linear, wps, 1);
        dopath.DOPlay();
        Debug.Log("执行了DoMovePath");
}

在这里插入图片描述

Log已输出,还是不原因。

设置path.wps 然后DOPlay

发现可以直接设置path的wps即路径的点。

void DoMovePath() {
        dopath.path.wps = wps;
        dopath.DOPlay();
        Debug.Log("执行了DoMovePath");
    }

结果也一样

宣告DOTweenPath尝试失败

原因还是不详,查了一圈也没找到答案,有知道的大佬可以分享一下

方案二、使用DOPath

using UnityEngine;
using DG.Tweening;
public class PathTest : MonoBehaviour
{
    public DOTweenPath dopath;
    Vector3[] wps = new Vector3[3] { new Vector3(0, 0, 0), new Vector3(3, 0, 0), new Vector3(3, 0, 3) };
    void Update()
    {
        if (Input.GetKeyUp(KeyCode.D)) {
            DoMovePath();
            Debug.Log("按了D键");
        }
    }

    void DoMovePath() {
        //dopath.path = new DG.Tweening.Plugins.Core.PathCore.Path(PathType.Linear, wps, 1);
        //dopath.path.wps = wps;
        //dopath.DOPlay();
        transform.DOPath(wps, 3f);
        Debug.Log("执行了DoMovePath");
    }
}

嘿`````,完美运行了!!

在这里插入图片描述

总结

DOPath可以直接设置路径点和动画时间,实现执行动态路径的动画。
DOTweenPath不知道可不可行,目前测出的暂时没成功

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
以下是使用DOTween插件在Unity中实现摄像机跟随路径运动的示例代码: 1. 首先,您需要安装DOTween插件。您可以在Unity Asset Store中搜索“DOTween”并安装它。 2. 创建一个空对象并将其命名为“CameraPath”。 3. 将路径上的所有点作为子对象添加到“CameraPath”对象中。每个子对象应该包含一个Transform组件,指定该点的位置。 4. 在“CameraPath”对象上添加一个脚本组件,并使用以下代码: ```csharp using UnityEngine; using DG.Tweening; public class CameraPathController : MonoBehaviour { public Transform[] waypoints; // 存储路径上的所有点 public float duration = 10.0f; // 动画持续时间 public Ease easeType = Ease.Linear; // 动画插值类型 void Start() { Camera.main.transform.DOPath(GetWaypoints(), duration, PathType.CatmullRom).SetEase(easeType); // 创建路径动画 } Vector3[] GetWaypoints() { Vector3[] path = new Vector3[waypoints.Length]; // 创建路径数组 for (int i = 0; i < waypoints.Length; i++) // 将路径上的所有点添加到路径数组中 { path[i] = waypoints[i].position; } return path; } } ``` 在此示例中,我们使用DOTween的DOPath方法来创建路径动画。我们将路径上的所有点存储在“waypoints”数组中,并使用GetWaypoints方法将它们转换为一个Vector3数组。我们还可以指定动画的持续时间和插值类型。 5. 将摄像机添加到场景中,并将其设置为“CameraPathController”脚本中使用的摄像机。 6. 运行场景并观察摄像机沿着路径移动的效果。 请注意,您可以根据需要调整路径点的数量和位置,并在“CameraPathController”脚本中调整动画的持续时间和插值类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十幺卜入

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值