【问题标题】:Unity 2D Object not Moving while using GetKey and tranform.positionUnity 2D 对象在使用 GetKey 和 transform.position 时不移动
【发布时间】: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 的浮点比较可以基本相同但不完全相同,在这种情况下它不会检查您的输入

标签: c# unity3d vector keycode


【解决方案1】:

如果你不必使用物理,你可以使用这个。

void FixedUpdate() {
        

        // 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;
        }
        else
        {
            // Move closer to Destination
            transform.position = Vector2.MoveTowards(transform.position, dest, speed);
        }
    }

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

好的,问题不在于代码,而在于我的对象的配置 如果您有同样的问题,请检查您的对象的重力是否为 0 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多