了解了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对于运行时地图生成不是一个好主意?