Добавить в корзинуПозвонить
Найти в Дзене

Разработка стратегии мечты – Nations. Создание наций.

Разработка стратегии мечты – Nations. Создание наций. Приветствую, дорогие друзья! Продолжаем работу над нашей глобальной стратегией. В этой публикации мы создадим игровые нацию. Пока одну, но я планирую в игре несколько десятков наций. Итак с чего начать, конечно со скрипта – using UnityEngine; [System.Serializable] public class Nation { public string Name; // Название нации public Color Color; // Цвет нации public Vector3Int CapitalPosition; // Позиция столицы public GameObject CapitalPrefab; // Префаб столицы public bool IsAlive = true; // Жива ли нация public NationObjectRegistry ObjectRegistry = new NationObjectRegistry(); // Регистр объектов нации public Nation(string name, Color color, Vector3Int capitalPosition, GameObject capitalPrefab) { Name = name; Color = color; CapitalPosition = capitalPosition; CapitalPrefab = capitalPrefab; } } Что в этом классе присутсвует – Название нации, цвет нации (в этот цвет будут разукрашиваться границы и флаги нации), Vector3Int CapitalPosition

Разработка стратегии мечты – Nations. Создание наций.

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

Итак с чего начать, конечно со скрипта –

using UnityEngine;

[System.Serializable]

public class Nation

{

public string Name; // Название нации

public Color Color; // Цвет нации

public Vector3Int CapitalPosition; // Позиция столицы

public GameObject CapitalPrefab; // Префаб столицы

public bool IsAlive = true; // Жива ли нация

public NationObjectRegistry ObjectRegistry = new NationObjectRegistry(); // Регистр объектов нации

public Nation(string name, Color color, Vector3Int capitalPosition, GameObject capitalPrefab)

{

Name = name;

Color = color;

CapitalPosition = capitalPosition;

CapitalPrefab = capitalPrefab;

}

}

Что в этом классе присутсвует – Название нации, цвет нации (в этот цвет будут разукрашиваться границы и флаги нации), Vector3Int CapitalPosition; - стартовая позиция столицы – начального поселения. Обратите внимание, что я использую Vector3Int – для того чтобы располагать стартовое поселене именно на нужном мне тайле.

Теперь создадим спавнер наций –

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.Tilemaps;

public class NationSpawner : MonoBehaviour

{

[SerializeField] private List<Nation> _nations = new List<Nation>(); // Список всех наций

[SerializeField] private MapReader _mapReader;

private void Start()

{

InitializeNations();

}

// Инициализация наций

private voidInitializeNations()

{

foreach (var nation in _nations)

{

SpawnCapital(nation);

}

}

// Размещение столицы на карте

private void SpawnCapital(Nation nation)

{

if (nation.CapitalPrefab == null)

{

Debug.LogError($"Capital prefab for {nation.Name} is not assigned!");

return;

}

Vector3worldCapitalPosition = _mapReader.GetTilePosition(nation.CapitalPosition);

if (worldCapitalPosition == Vector3.zero)

{

Debug.LogError($"Не удалось найти тайл для столицы {nation.Name} в позиции {nation.CapitalPosition}");

return;

}

GameObject capitalInstance = Instantiate(nation.CapitalPrefab, worldCapitalPosition, Quaternion.identity);

Settlement settlement = capitalInstance.GetComponent<Settlement>();

if (settlement == null)

{

Debug.LogError($"Settlement component not found on {nation.CapitalPrefab.name}!");

return;

}

settlement.SetName("Moskow");

settlement.SetFlagColor(nation.Color);

settlement.CreateBorders(nation.Color, worldCapitalPosition, capitalInstance.transform);

// Регистрируем нацию в поселении

settlement.RegisterNation(nation);

}

}

Тут мы создаем список наций, в котором будем все наши нации определять (посмотрю, может в дальнейшем буду делать это через json файл) и передаем MapReader для определения позиции на карте мира. И в методе SpawnCapital мы создаем префаб нашей столицы, и устанавливаем ее параметры.

Вот как спавнер выглядит в инспекторе –

Пы.сы. – надо через инспектор задавать название столицы)))

Вот так это будет выглядеть в игре –

-2

Можно обратить внимание, что поселение находится именно в том тайле, в котором я указал.

На этом данную публикацию можно заканчивать! До новых встреч.