Как осуществить отражение объекта в Unity?

Как можно отзеркалить персонажа в 2D игре, чтобы он отображался зеркально, когда движется влево?
  • 18 октября 2023 г. 20:18
Ответы на вопрос 2
Для отражения объекта в Unity можно использовать следующий подход:

1. Создайте пустой объект как родительский для вашего персонажа.
2. Добавьте компонент Scale модуля Transform пустого объекта.
3. Установите значение X Scale равным -1. Теперь ваш персонаж будет отображаться зеркально.
4. Создайте скрипт для персонажа, который будет проверять направление его движения.
5. Если персонаж движется влево, установите значение X Scale пустого объекта равным 1, чтобы снять зеркальное отображение.
6. Если персонаж движется вправо, установите значение X Scale пустого объекта равным -1, чтобы снова отобразить его зеркально.

Пример кода для скрипта персонажа:

```csharp
using UnityEngine;

public class CharacterController : MonoBehaviour
{
    public float speed = 5f;

    private bool isFacingLeft = true;
    private Transform parentTransform;

    private void Start()
    {
        parentTransform = transform.parent;
    }

    private void Update()
    {
        float moveX = Input.GetAxis("Horizontal");

        if (moveX > 0 && isFacingLeft)
        {
            Flip();
        }
        else if (moveX < 0 && !isFacingLeft)
        {
            Flip();
        }

        transform.Translate(new Vector3(moveX * speed * Time.deltaTime, 0f, 0f));
    }

    private void Flip()
    {
        isFacingLeft = !isFacingLeft;
        Vector3 theScale = parentTransform.localScale;
        theScale.x *= -1;
        parentTransform.localScale = theScale;
    }
}
```

Убедитесь, что у персонажа есть Collider и Rigidbody, если это необходимо для физики или взаимодействия с другими объектами в сцене.
Например, повернуть объект вдоль оси OY на основе ввода пользователя:void Update() {
	// считываем ввод пользователя
	float x = Input.GetAxis("Horizontal");
	
	// вращаем объект
	if (x > 0) {
		transform.eulerAngles = new Vector3(0, 0, 0); // направо
	} else if (x < 0) {		
		transform.eulerAngles = new Vector3(0, 180, 0); // налево
	}
	
	// другая логика..
} 
Похожие вопросы