将角色移动到触摸位置2D(没有刚体和动画运动)UNITY

时间:2018-01-09 20:48:09

标签: c# unity3d animation character

美好的一天。我正在努力实现简单的事情,但没有任何东西可行......

所需的输出:

•玩家触及我世界的一个地方

•角色开始随着步行动画平滑移动到该位置

实际结果:

•玩家触及我世界的一个地方

•角色只是跳到最后一点,没有顺畅的动作

事情尝试了:

• Vector2 finalPosition = Camera.main.ScreenToWorldPoint(position); 
transform.position = finalPosition;

在这种情况下,角色会跳到最后一点

• Vector2 finalPosition = Camera.main.ScreenToWorldPoint(position); 
transform.Translate(finalPosition);

在这种情况下,角色会从屏幕上消失。

任何解决方案?

2 个答案:

答案 0 :(得分:2)

您可以使用Vector2.Lerp()在两点之间平滑移动。

一些伪代码:

bool move;
float t;
Update()
{
    if () // insert condition to begin movement
    {
        move = true;
        t = 0; // reset timer
        startPos = transform.position; // store current position for lerp
        finalPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }
    if (move)
        MovePlayer();
}

void MovePlayer()
{
    t += Time.deltaTime / 3f; // 3 is seconds to take to move from start to end
    transform.position = Vector2.Lerp(startPos, finalPosition, t);
    if (t > 3)
    {
        move = false; // exit function
    }
}

答案 1 :(得分:0)

update中的

transform.position += (final_pos - transform.position).normalized * Time.deltaTime;

这会向您的当前位置添加方向...使用增量时间来缩放移动,您可以通过将其全部乘以某个标量值(即任何float值来增加或减少速度。请注意,normalize最好是一次而不是每一帧,但这是一般的想法。