@Andrew_Yar

C# Unity. Как переопределить направление «forward» по умолчанию для 2D объекта?

Я полный новичок в программировании, мне нужна помощь в решении моей задачи.
Есть 2D объект, он вращается в плоскости (x,y) и я использую
if(Input.GetKey(KeyCode.UpArrow))
{
transform.position += transform.forward / 10;
}
для движения в направлении forward объекта, т.к. это направление должно вращаться вместе с объектом, я на это надеюсь. Но мой 2D объект движется вдоль оси Z, если я использую transform.position += transform.forward / 10; . Я так понимаю, что если сориентировать объект "носом" по оси Z, все должно получиться, если объект вращается в плоскостях X,Z или Y, Z. Есть способ поменять направление forward для объекта на другую ось? Цель - задать движение 2D объекта в направлении поворота условного "пЕреда", без использования оси Z. Или, возможно, есть способ поменять местами оси координат в 2D проекте с X,Y на X,Z? Если это поможет изменить направление forward. Надеюсь, что я грамотно передал свою мысль :-)
  • Вопрос задан
  • 1090 просмотров
Решения вопроса 1
@MifanyaRa
В твоём случае надо лучше использовать
if(Input.GetKey(KeyCode.UpArrow))
{
    transform.position += Vector3.up * _speed * Timed.delta;
}


где _speed это выведеное поле в испектор, значение которого ты сможешь удобно менять во время игры.
[SerializeField] private float _speed = 10f;

аналогично что бы двигаться вниз
if(Input.GetKey(KeyCode.DownArrow))
{
    transform.position -= Vector3.up * _speed * Timed.delta;
}


и для вправо и влево
if(Input.GetKey(KeyCode.RightArrow))
{
    transform.position += Vector3.right * _speed * Timed.delta;
}
if(Input.GetKey(KeyCode.LeftArrow))
{
    transform.position -= Vector3.right * _speed * Timed.delta;
}


А то, что ты использовал transform.forward - это больше для 3D игр подходит.

И вот тебе теория по векторам. Я думаю что здесь всё хорошо рассказано для твоего уровня https://habr.com/ru/post/131931/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Andrew_Yar Автор вопроса
Спасибо за информацию, очень содержательная статья в ссылке, но мне нужно некоторое время понять, что я смогу использовать. Хочу добавить, что стрелки "влево" и "вправо" я использую для поворота вокруг оси (это получилось реализовать), а "вверх" хочу использовать для разгона (по направлению разворота), "вниз" для замедления.
Этот способ мне не подходит:
if(Input.GetKey(KeyCode.UpArrow))
{
transform.position += Vector3.up * _speed * Timed.delta;
}
Но, я смогу использовать sin, для решения своей проблемы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы