Search code examples
c#unity-game-enginevectorkeycode

Unity 2D Object not Moving while using GetKey and tranform.position


Got a problem with my code (on Unity 2D).

I'm trying to make a PacMan like for my class, and my PacMan doesn't want to move at all. He's animated but he's not moving.

    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>());
    }
}

Please help me :)


Solution

  • If you don't have to use physics, you can use this.

    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);
            }
        }