首页 > 解决方案 > 使物体向一个方向滑动

问题描述

我想让我的刚体对象向右或向左滑动。

例如,如果他在 0 X,他将向一个方向滑动 1,然后在该方向停止并停止。

通过添加一个力,物体会继续向那个方向移动,我希望物体移动,然后停止。

编辑 这是我尝试过的

void Update() {

    if (Input.GetKeyDown("d") && !isMoving) {
        StartCoroutine(MoveToPos(Vector3.right));
    }

    if (Input.GetKeyDown("a") && !isMoving) {
        StartCoroutine(MoveToPos(Vector3.left));
    }
}

public IEnumerator MoveToPos(Vector3 direction) {
    isMoving = true;
    var t = 0f;
    var startPosition = transform.position;
    var value = direction == Vector3.right? 1 : -1;
    while (t < 1f) {
        t += 0.05f;
        var endPosition = transform.position;
        endPosition.x = startPosition.x + value * t;
        transform.position = Vector3.Lerp(transform.position, endPosition, t);
        Debug.Log(player.position);
        yield return null;
    }
    isMoving = false;
}

但遗憾的是它的动画非常难看,对象在不久之后就卡入最终位置,看起来不像对象滑动然后停在那里。就像没有加速和减速一样。

编辑 2

我尝试调整值并进行减速运动。有点工作,但我想它仍然需要改进。

public IEnumerator MoveToPos(Vector3 direction) {
    isMoving = true;
    var t = 0.0;
    var startPosition = transform.position;
    var value = direction == Vector3.right ? 1 : -1;
    while (t < 1) {
        if (t < 0.5) t += 0.1;
        else t += 0.03125;
        Debug.Log(t);
        var endPosition = transform.position;
        endPosition.x = startPosition.x + value * (float)t;
        transform.position = Vector3.Lerp(transform.position, endPosition, (float)t);
        yield return null;
    }
    isMoving = false;
}

我猜调整加速度和减速度的值会使动画更流畅。

标签: c#unity3d

解决方案


简单的方法是这样的:

void Update()
    {
        if(Input.GetKeyDown(KeyCode.A))
            transform.Translate(Vector3.right * 1);
    }

作为“A Key”你有条件移动对象,并改变Vector3.right对应的方向(左,上,下......)

但我会建议使用 Lerp 函数给它更逼真的运动: https ://docs.unity3d.com/ScriptReference/Vector3.Lerp.html


推荐阅读