如何使用Zenject Factory将游戏对象附加到另一个对象(Tilemap)?

时间:2019-04-21 21:06:24

标签: c# unity3d dependency-injection zenject

了解了Grid和Tilemap的存在之后, 我决定重写代码以绘制六边形图。并且存在将预制对象分配给地图图块的问题。

我尝试了两种方法,但都遇到了我不太了解如何解决的问题:
1)如果我使用工厂创建MonoBehaviour对象

    Container.BindFactory<Point2D<int>, Hex, Hex.Factory>()
    .FromComponentInNewPrefab(_settings.PlainPrefab)
    .WithGameObjectName("Hex")
    .UnderTransformGroup("Map");

显然,预制件是在名为“ 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对于运行时地图生成不是一个好主意?

0 个答案:

没有答案