Как перевернуть 2D-персонаж в Unity с помощью углов Эйлера - PullRequest
0 голосов
/ 06 мая 2020

Я хочу, чтобы мой персонаж переворачивался в другом направлении и двигался вперед в этом направлении, но я понял, что мой персонаж может ходить только в одном направлении, даже если персонаж поворачивается, вы можете помочь решить это

вот мой код

public class BirdMovement : MonoBehaviour
{
Rigidbody2D jump;
public bool reverse;

void Start()
{
    jump = GetComponent<Rigidbody2D>();
}

void Update()
{
int jumpstrength = 50;
transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f);
    if (Input.GetAxis("Horizontal") > 0 && !reverse)
    {
        flip();
    }
    if (Input.GetAxis("Horizontal") < 0 && reverse)
    {
        flip();
    }

    if (Input.GetKey(KeyCode.Mouse0))
    {
        jump.AddForce(new Vector2(0, jumpstrength));
    }

void flip()
{
    reverse = !reverse;
    transform.eulerAngles = new Vector3(0,180,0);
    return;
}
}

1 Ответ

1 голос
/ 06 мая 2020

Transform.Translate учитывает направление, в котором смотрит ваша птица. Вы заставляете 2 движения работать друг против друга.

transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f);

Если значение оси опускается ниже отрицательного, вы говорите птице идти назад по x, но это локальный x птицы, а не глобальный x мира . В то же время вы говорите ему перевернуть, и он это делает, и его обратное направление становится тем, что раньше было его вперед.

Вы можете исправить это, используя абсолютное значение оси.

transform.Translate(Mathf.Abs(Input.GetAxis("Horizontal")) * 5f * Time.deltaTime, 0f, 0f);

Или попросить Translate использовать глобальные координаты,

transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f, Space.World);

При этом, теперь мне интересно, как вообще работает ваша функция переворота, когда все, что вы делаете, каждый раз присваиваете 180 по y. Это не сможет перевернуть вашего персонажа более одного раза. Вместо этого используйте transform.Rotate.

void flip()
{
    reverse = !reverse;
    transform.Rotate(0,180,0);
    return;
}

Также, как скобки в вашем примере, flip - это вложенная функция обновления. Это предназначено?

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