Найти в Дзене

Разработка стратегии мечты – Информация о ландшафте/TileData.

Разработка стратегии мечты – Информация о ландшафте/TileData. Приветствую, дорогие друзья! Продолжаем публикации про разработку стратегии мечты. В этой статье разберем такой вопрос как вывод информации о ландшафте и визуализируем его. Итак я создал вот такую панель- В которой будет выводится название ландшафта, ресурсы, которые свойственны данному типу ландшафта и кнопочка закрыть панель информации. В прошлой публикации, где мы разбирали TileData, мы добавили поле public Goods[] AvaliableGoods; public class LandscapeData : ScriptableObject { public TileBase[] Tiles; public string LandscapeName; public Goods [] AvaliableGoods; } Забегу немного вперед, Goods тоже наследуется от ScriptableObject, но это разберем в дальнейшем. И в этот массив товаров я передал все доступные данному типу ландшафта ресурсы. Например в океане у нас водится рыба – А на лугах – фрукты, камни, палки и дикие животные – Теперь когда мы все назначили, нам необходимо создать скрипт, который всю эту информацию будет

Разработка стратегии мечты – Информация о ландшафте/TileData.

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

Итак я создал вот такую панель-

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

В прошлой публикации, где мы разбирали TileData, мы добавили поле public Goods[] AvaliableGoods;

public class LandscapeData : ScriptableObject

{

public TileBase[] Tiles;

public string LandscapeName;

public Goods [] AvaliableGoods;

}

Забегу немного вперед, Goods тоже наследуется от ScriptableObject, но это разберем в дальнейшем. И в этот массив товаров я передал все доступные данному типу ландшафта ресурсы.

Например в океане у нас водится рыба –

-2

А на лугах – фрукты, камни, палки и дикие животные –

-3

Теперь когда мы все назначили, нам необходимо создать скрипт, который всю эту информацию будет считывать.

public class MapReader : MonoBehaviour

{

public static MapReader Instance { get; private set; }

[SerializeField] public Tilemap[] TileMaps;

[SerializeField] private List<LandscapeData> _tileDatas;

[SerializeField] private GameObject_landscapeInfoPanel;

[SerializeField] private TextMeshProUGUI_landscapeNameText;

[SerializeField] private Button _closeButton;

public Dictionary<TileBase, LandscapeData> DataFromTiles;

private Vector3Int _gridPosition;

[SerializeField] private TextMeshProUGUI_goodName;

private void Awake()

{

if (Instance == null)

{

Instance = this;

}

else

{

Debug.LogError("Multiple instances of MapReader found!");

Destroy(gameObject);

}

DataFromTiles = new Dictionary<TileBase, LandscapeData>();

foreach (var tileData in _tileDatas)

{

foreach (var tile in tileData.Tiles)

{

DataFromTiles.Add(tile, tileData);

}

}

}

private void Start()

{

_landscapeInfoPanel.SetActive(false);

_closeButton.onClick.AddListener(CloseLandscapeInfoPanel);

}

private void Update()

{

if (Input.GetMouseButtonDown(0))

{

// Проверяем, был ли клик по UI

if (!IsPointerOverUI())

{

// Проверяем, был ли клик по объекту Settlement

if (!IsClickOnSettlement())

{

GetLandscapeInfo();

}

}

}

}

private void GetLandscapeInfo()

{

Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

foreach (Tilemap tilemap in TileMaps)

{

_gridPosition = tilemap.WorldToCell(mousePosition);

TileBase clickedTile = tilemap.GetTile(_gridPosition);

if (clickedTile != null && DataFromTiles.TryGetValue(clickedTile, out LandscapeData tileData))

{

string clickedTileName = tileData.LandscapeName;

string goodsNames = GetGoodsNames(tileData.AvaliableGoods);

_landscapeInfoPanel.SetActive(true);

_landscapeNameText.text = clickedTileName;

_goodName.text = goodsNames;

Debug.Log($"Tile: {_gridPosition}");

}

}

}

Во-первых, этот объект является статическим! Затем в массив Tilemap[] TileMaps мы передаем все наши тайловые карты, а также все TileData которые мы создали. И теперь при нажатии на любой тайл будет появлятся _landscapeInfoPanel в которой отображается информация о тайле –

-4

-5

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