Unity: Создать карту/миникарту

Создание тестовой сцены и миникарты

1. Добавляем на сцену камеру:
GameObjectCamera
2. В Инспекторе изменяем значения компонента Transform:

  • Position:
    X = 0
    y = 20
    Z = 0
  • Rotation:
    X = 90
    y = 0
    Z = 0

3. В Инспекторе изменяем значения компонента Camera:

  • Projection -> Orthographic
  • Size = 15

*. Переименуем эту камеру на новое название: «MapCamera»
4. Добавим на сцену новый объект:
GameObjectUIRaw Image
5. Переключим сцену в режим 2D
6. Разместим Raw Image на сцене и настроим его размеры:
Unity: Создать карту/миникарту

Я создаю обычную карту, а не мини-карту, поэтому установил размеры почти на полный экран!

 

Пока для компонента Raw Image поле Texture установлено как None, поэтому нужно создать новую текстуру для нашей карты

 

7. В окне Project нажимаем правую кнопку мышки, затем CreateRender Texture (я назвал её «Map Render Texture»
8. Размеры желательно установить такие же как и у RawImage (я же оставил 256):
Unity: Создать карту/миникарту
9. Выделим в Инспекторе нашу камеру «MapCamera» и в поле Target Texture выставим текстуру «Map Render Texture» из п.7:
Unity: Создать карту/миникарту
10. В окошке Иерархии выделяем RawImage и выставляем для него текстуру «Map Render Texture»:
Unity: Создать карту/миникарту

Чтобы просто проверить работу карты/миникарты, можно запустить в редакторе проект и в окне Сцены сдвинуть камеру — окошко с картой должно обновиться. Если всё работает, можно перейти к следующему шагу — создание скрипта для перемещения карты.

 

Скрипт для перемещения карты

Как вариант, камеру карты (MapCamera) можно сделать дочерним объектом для Player, т.о. она всегда будет перемещаться на координаты игрока, но мы создадим скрипт с немного более широкими возможностями.

 

11. Скрипт нужно поместить на камеру карты (миникарты):

using UnityEngine;

public class MapOperator : MonoBehaviour
{
  [SerializeField] private Transform player; // Переменная для доступа к координатам игрока
  public bool isRotateMinimap = false;       // Если переменная равна TRUE, то миникарта будет поворачиваться вместе с игроком

  private void LateUpdate()
  {
    Vector3 newPosition = player.position;
    newPosition.y = transform.position.y;
    transform.position = newPosition;

    if (isRotateMinimap)
    {
      transform.rotation = Quaternion.Euler(90f, player.eulerAngles.y, 0f);
    }
  }
}


Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments