Как использовать Zenject Factory для прикрепления игрового объекта к другому объекту (Tilemap)? - PullRequest
0 голосов
/ 22 апреля 2019

После того, как я узнал о существовании 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 не очень хорошая идея для генерации карты во время выполнения?

...