После того, как я узнал о существовании Grid и Tilemap,
Я решил переписать свой код для рисования карты шестиугольников. И есть проблема с назначением prefabs объекта для тайла карт.
Я пробовал два способа, и в обоих я столкнулся с проблемами, которые я не совсем понимаю, как решить:
1) Если я использую фабрику для создания объекта MonoBehaviour
Container.BindFactory<Point2D<int>, Hex, Hex.Factory>()
.FromComponentInNewPrefab(_settings.PlainPrefab)
.WithGameObjectName("Hex")
.UnderTransformGroup("Map");
префабы, очевидно, создаются в контейнере с именем «Карта». И при попытке назначить их объекту Tile
var hex = _hexFactory.Create(point);
tilemap.SetTile(vector, new Tile() { gameObject = h.gameObject });
копия объекта создается внутри плитки.
Понятно, что использование FromComponentInNewPrefab в этом случае не подходит.
Есть ли способ создать объект MonoBehaviour на фабрике с созданием экземпляра только в определенном месте?
2) Я тоже попробовал способ, загрузив сборник.
public class HexPrefabs
{
public IEnumerable<GameObject> AvailablePrefabs { get; private set; }
public HexPrefabs()
{
AvailablePrefabs = new[]
{
Resources.Load<GameObject>("Prefabs/PlainHex")
};
}
}
//---------------------
var goHex = _hexPrefabs.AvailablePrefabs.FirstOrDefault();
var hex = goHex.GetComponent<Hex>();
hex.Construct(point);
tilemap.SetTile(vector, new Tile() { gameObject = goHex });
Но в этом случае, меняя префаб-скрипт, мы меняем его для всех его клонов. И, честно говоря, такой подход в коде кажется мне отвратительно грязным.
Как мне организовать свой код для выполнения этой задачи? Может быть, использование tilemap не очень хорошая идея для генерации карты во время выполнения?