【问题标题】:Best way to smoothly move a character from one point to another [duplicate]将角色从一个点平滑移动到另一个点的最佳方法[重复]
【发布时间】:2018-04-09 15:20:57
【问题描述】:

我正在尝试制作一个游戏,如果用户点击屏幕,他们的角色会顺利地从一个点(比如屏幕左侧)移动到另一个点(屏幕右侧)。

我知道您可以通过以下几种方式做到这一点:协程、Lerp 甚至动画。我也不介意代码示例..

有哪些不同的方法可以实现这一目标?

提前致谢!

【问题讨论】:

  • 定义“最佳”...
  • “最佳”方式确实是主观的......但如果您提供一些您所需要的示例,将会很有帮助。例如,这个系统是否需要担心碰撞检测?您是否使用任何形式的寻路?

标签: unity3d


【解决方案1】:

好吧,best 主要是基于意见,实际上并不是一个很好的提问方式......无论如何

其他答案未提及的内容:

当然,平滑度不是来自Vector3.Lerp,也不是来自Coroutines,而是来自Time.deltaTime

这个Time.deltaTime 值是自上一帧以来经过的实际时间。这允许进行各种平滑处理,尤其是始终采用相同数量的实时移动和动作,而与帧速率无关。

就运动的具体用例而言,我个人更喜欢使用Vector3.MoveTowards 而不是Vector3.Lerp,因为后者越接近目标越慢。 (至少如果您像示例中经常使用的那样使用 transform.position 作为第一个值)

这里是 Unity 脚本 API 提供的示例

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Transform target;
    public float speed;
    void Update() {
        float step = speed * Time.deltaTime;
        transform.position = Vector3.MoveTowards(transform.position, target.position, step);
    }
}

当然,您也可以将Vector3 定义为目标位置,而不是target.position

如果您需要碰撞检测,则不应同时使用两者,因为您可能只需一步将对象移动到远处,这样就不会触发碰撞。

在这种情况下,您可能会在 this post 中找到提示

【讨论】:

    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2020-09-09
    • 2013-07-22
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多