我一直在努力使这项工作有一段时间,我失败了。Unity2D - 以时间方式移动网格中的2D对象
我有一个Rigidbody2D在自上而下的2D级别,我试图简单地沿着坐标移动它(这些级别是网格状的),所以一步/按下按钮等于一个正方形走过。只能沿四个方向中的一个方向行走,不管用户什么时候停止步行运动,它都应该在方形上结束。相当于我想达到的一个好游戏是火焰/呼吸/任何类似的RPG系列。我试过使用协程来获取更新函数,在每一步之后等待一秒钟,但这似乎不起作用。我最接近的是下面的代码。多谢你们!
public class PlayerMovement2D : MonoBehaviour
{
Rigidbody2D rbody;
Animator anim;
float speed = 1.25f;
Vector2 pos;
void Start()
{
rbody = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
pos = rbody.position;
}
void FixedUpdate()
{
Vector2 movement_vector = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
if (movement_vector.x != 0 || movement_vector.y != 0)
{
if (movement_vector.x > 0)
{
pos += Vector2.right;
pos.y = 0;
}
else if (movement_vector.x < 0)
{
pos += Vector2.left;
pos.y = 0;
}
else if (movement_vector.y > 0)
{
pos += Vector2.up;
pos.x = 0;
}
else if (movement_vector.y < 0)
{
pos += Vector2.down;
pos.x = 0;
}
anim.SetBool("IsWalking", true);
anim.SetFloat("Input_x", movement_vector.x);
anim.SetFloat("Input_y", movement_vector.y);
}
else
{
anim.SetBool("IsWalking", false);
}
rbody.position = Vector2.MoveTowards(rbody.position, pos, speed * Time.deltaTime);
//transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * speed);
pos = rbody.position;
}
}
如果您尝试了任何方法或接受解决您的问题的答案,请告诉我们。 – Maakep