【发布时间】:2021-11-09 09:05:39
【问题描述】:
我的代码有问题(在 Unity 2D 上)。
我正在尝试为我的班级制作一个像 PacMan 一样的 PacMan,而我的 PacMan 根本不想移动。 他很活跃,但他一动不动。
public class PacmanMove : MonoBehaviour {
public float speed = 0.4f;
Vector2 dest = Vector2.zero;
void Start() {
dest = transform.position;
}
void FixedUpdate() {
// Move closer to Destination
Vector2 p = Vector2.MoveTowards(transform.position, dest, speed);
GetComponent<Rigidbody2D>().MovePosition(p);
// Check for Input if not moving
if ((Vector2)transform.position == dest) {
if (Input.GetKey(KeyCode.UpArrow) && valid(Vector2.up))
dest = (Vector2)transform.position + Vector2.up;
if (Input.GetKey(KeyCode.RightArrow) && valid(Vector2.right))
dest = (Vector2)transform.position + Vector2.right;
if (Input.GetKey(KeyCode.DownArrow) && valid(-Vector2.up))
dest = (Vector2)transform.position - Vector2.up;
if (Input.GetKey(KeyCode.LeftArrow) && valid(-Vector2.right))
dest = (Vector2)transform.position - Vector2.right;
}
}
bool valid(Vector2 dir) {
// Cast Line from 'next to Pac-Man' to 'Pac-Man'
Vector2 pos = transform.position;
RaycastHit2D hit = Physics2D.Linecast(pos + dir, pos);
return (hit.collider == GetComponent<Collider2D>());
}
}
请帮帮我:)
【问题讨论】:
-
您应该从您的 FixedUpdate 中删除“GetComponent
()”,并在您的 Start 中只获取一次 Rigidbody 并将其存储在一个成员中 -
你做了什么调试。由于 dest 和 position 的浮点比较可以基本相同但不完全相同,在这种情况下它不会检查您的输入