美好的一天。我正在努力实现简单的事情,但没有任何东西可行......
所需的输出:
•玩家触及我世界的一个地方
•角色开始随着步行动画平滑移动到该位置
实际结果:
•玩家触及我世界的一个地方
•角色只是跳到最后一点,没有顺畅的动作
事情尝试了:• Vector2 finalPosition = Camera.main.ScreenToWorldPoint(position);
transform.position = finalPosition;
在这种情况下,角色会跳到最后一点
• Vector2 finalPosition = Camera.main.ScreenToWorldPoint(position);
transform.Translate(finalPosition);
在这种情况下,角色会从屏幕上消失。
任何解决方案?
答案 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
最好是一次而不是每一帧,但这是一般的想法。