Почему мой GameObject возвращается в определенную z-позицию при отпускании джойстика? - PullRequest
0 голосов
/ 11 октября 2019

Я работаю над небольшим проектом в единстве. Это игра сверху вниз, в которой есть персонаж, управляемый джойстиком. Когда я запускаю игру, мой персонаж начинает -90 в z-позиции, которая должна быть в 0. Но когда я перемещаю джойстик в направлении, которое я хотел, чтобы он работал, он работает нормально, это означает, что он смотрит в направлении, в котором он бежит,Однако, если я отпущу джойстик, персонаж снова вернется к -90 в z-положении, и я пытаюсь понять, почему это происходит, и не допустить этого.

Я искал обучающие видеои некоторые сообщения здесь, но никто не ответил на мою проблему. Я также попытался удалить «-90f» в моей формуле Mathf.Atan2, но когда я это сделал, он поворачивается на 90 в z-положении меньше. Это означает, что когда я направляю джойстик прямо вниз, персонаж поворачивается вправо.

Вот мой код:

public class PlayerController : MonoBehaviour
{

    public static PlayerController instance;

    public Rigidbody2D rb;
    public Joystick joystick;

    private float moveSpeed = 2.5f;
    Vector2 movement;


    // Update is called once per frame
    void Update()
    {
        movement.x = joystick.Horizontal;
        movement.y = joystick.Vertical;
    }

    void FixedUpdate()
    {
        rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
        float angle = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg - 90f;
        transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle));
    }

Я ожидаю, что мой персонаж начнет с 0 в z-позициикогда игра начнется и персонаж останется и повернется к направлению джойстика, прежде чем его отпустить, вместо того, чтобы повернуть обратно в -90 в z-положении.

1 Ответ

1 голос
/ 11 октября 2019

Благодаря @TheLazyScripter я смог перекодировать свой сценарий и заставить своего персонажа делать то, что мне было нужно. Я просто упустил из виду, что он был на FixedUpdate, и поэтому он будет продолжать вызывать его, даже когда я остановлю джойстик. Я все еще новичок в программировании, и я учился на прошлой неделе, я не отдыхаю. В любом случае, вот что я сделал с моим кодом:

void Update()
    {
        if (joystick.Horizontal >= .1f || joystick.Horizontal <= -.1f)
        {
            movement.x = joystick.Horizontal;
            MoveCharacter();
        }
        else
        {
            movement.x = 0f;
            angle = 0f;
        }

        if (joystick.Vertical >= .1f || joystick.Vertical <= -.1f)
        {
            movement.y = joystick.Vertical;
            MoveCharacter();
        }
        else
        {
            movement.y = 0f;
            angle = 0f;
        }
    }

    void MoveCharacter()
    {
        rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
        angle = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg - 90f;
        transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle));
    }

Надеюсь, это может помочь кому-то, у кого может быть такая же проблема. Я сомневаюсь, что у кого-то будет такая же проблема, но я надеюсь, что это поможет. : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...