【问题标题】:moving a 2d object from point a to b without changing its rotation将 2d 对象从 a 点移动到 b 点而不改变其旋转
【发布时间】:2019-06-26 20:13:01
【问题描述】:

我正在尝试将 2d 对象从 a 点移动到 b 点而不改变其统一旋转

我尝试使用Vector2.Lerp(),但它不起作用

Vector2 pointB = new Vector2(20, 10);
Vector2.Lerp(transform.position, pointB, 3F);

代码应该在 3F 秒内将对象从点 a 移动到 b

【问题讨论】:

    标签: c# unity3d 2d


    【解决方案1】:

    首先,Vector2.Lerp 不会更改第一个参数的值。如果您想以这种方式更改变换的位置,您需要将新值分配给transform.position

    其次,您需要每帧更新一次变换的位置,以保持变换平稳移动。

    第三,Vector2.Lerp 只会在开始和结束之间产生位置,t 在 0 和 1 之间。这个t 应该与自此运动开始以来经过的时间与将要经过的时间的比率有关完成动作。

    这对coroutine 很有用:

    private IEnumerator GoToInSeconds(Vector2 pointB, float movementDuration)
    {
        Vector2 pointA = transform.position;
        float timeElapsed = 0f;
        while (timeElapsed < movementDuration)
        {
            yield return null;
            timeElapsed += Time.deltaTime;
            transform.position = Vector2.Lerp(pointA, pointB, timeElapsed/movementDuration);
        }
    }
    

    下面是Start的使用示例:

    void Start() 
    {
        Vector2 pointB = new Vector2(20, 10);
        StartCoroutine(GoToInSeconds(pointB, 3f));
    }
    

    【讨论】:

    • 小提示:对于额外的缓入和缓出,您可以使用Mathf.SmoothStep(0, 1, timeElapsed/movementDuration)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2020-02-08
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多