Eduardo Guterres
Eduardo Guterres

Reputation: 9

Unity Player Movement Not Working

I have a script to move my character(player) The script should be fine and it does not have any errors, although when I press play I try to use the arrows and it does not work and I don't know why.

Here is the code. I appreciate any help you can give me, thanks

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

Direction currentDir;
Vector2 input;
bool isMoving = false;
Vector3 startPos;
Vector3 endPos;
float t;

public float walkSpeed = 3f;

// Update is called once per frame
void Update()
{

    if (isMoving)
    {
        input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
        if (Mathf.Abs(input.x) > input.y)
            input.y = 0;
        else
            input.x = 0;

        if (input != Vector2.zero)
        {
            StartCoroutine(Move(transform));
        }
    }

}

public IEnumerator Move(Transform entity)
{

    isMoving = true;
    startPos = entity.position;
    t = 0;

    endPos = new Vector3(startPos.x + System.Math.Sign(input.x), startPos.y +
        System.Math.Sign(input.y), startPos.z);

    while (t < 1f)
    {
        t += Time.deltaTime * walkSpeed;
        entity.position = Vector3.Lerp(startPos, endPos, t);
        yield return null;
    }

    isMoving = false;
    yield return 0;

}


enum Direction
{
    North,
    East,
    South,
    West
}
    }

Upvotes: 0

Views: 1524

Answers (1)

rs232
rs232

Reputation: 1317

Change

void Update()
{
    if (isMoving)
    {

to

void Update()
{
    if (!isMoving)
    {

Otherwise, on each Update you check your isMoving variable and do nothing if it is false. The only place where isMoving could become true is your Move coroutine, but it could only be launched from Update, which does not do anything since isMoving is false.

Upvotes: 2

Related Questions