alex4answ
@alex4answ

Как отзеркалить 2D персонажа?

Есть 2D персонаж с вложенными объектами:
Player (скрипт движения персонажа и просто обертка)
- Body (спрайт тела)
- Hand (объект, чтобы вращать всей рукой)
- - Wrist (спрайт руки)
- - Gun (спрайт и скрипт оружия)
- - - BulletSpawn (объект-хелпер, где спавнить пули и в какую сторону)

При движении влево, нужно развернуть (отзеркалить) Player, для этого делаю:
Vector3 scale = transform.localScale; // Player рутовый объект
scale.x *= -1;
transform.localScale = scale;


Все работает, игрок отразился как нужно, но проблема с вектором вращения, когда пытаюсь получить bulletSpawn.transform.rotation, получаю какие-то совсем странные значения, понимаю что это вектор * -1 из-за масштабирования для поворота, но не понимаю, что нужно сделать, чтобы все работало и не сьезжали значения поворота.

Сейчас пробую сделать отзеркаливание персонажа через поворот по оси y, но дополнительно нужно еще менять z позиции для слоев, чтобы перенести их на первый план.

Как правильно отзеркалить персонажа при движении влево-вправо, чтобы не мучаться с поворотами ?
  • Вопрос задан
  • 447 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Обычно для этого достаточно развернуть рут объект игрока по oY. Типа такого:
public class PlayerController : MonoBehaviour {

	// ...

	private void Update() {
		float xInput = Input.GetAxisRaw("Horizontal");

		if (xInput != 0)
			transform.localEulerAngles = new Vector3(0, xInput > 0 ? 0 : 180, 0);

		// ...
	}

	// ...

}


PS. С этим у вас может возникнуть новая проблема - если вы следите камерой за игроком, вложив её по иерархии, тогда камеру тоже развернёт и визуально ничего не поменяется. Если у вас такое будет - вынесите её из иерархии игрока и напишите скрипт, который будет синхронизировать oX/oY координаты игрока с камерой.
Ответ написан
Комментировать
GavriKos
@GavriKos Куратор тега Unity
Поворачивайте и зеркальте разные объекты, вложенные один в другой
Ответ написан
Ваш ответ на вопрос

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

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