我有一个场景,我需要知道有关tilemap中所有tile的某些信息。从我所做的研究和其他人的问题来看,这可能不是最简单的事情。
据我所知,我面临3种可能的选择:
目前我正在使用以下内容:
private void GetWorldTiles () {
tiles = new Dictionary<Vector3, WorldTile>();
foreach (Vector3Int pos in Tilemap.cellBounds.allPositionsWithin) {
var localPlace = new Vector3Int(pos.x, pos.y, pos.z);
if (!Tilemap.HasTile(localPlace)) continue;
var tile = new WorldTile
{
LocalPlace = localPlace,
WorldLocation = Tilemap.CellToWorld(localPlace),
TileBase = Tilemap.GetTile(localPlace),
TilemapMember = Tilemap,
Name = localPlace.x + "," + localPlace.y,
Cost = 1 // Cost is needed for pathfinding. Other properties may also exist such as "isSpawnPoint", or what have you.
};
tiles.Add(tile.WorldLocation, tile); //tiles is a Dictionary<string, WorldTile>
}
}
上面的代码是从这个简短的教程here解除的
我的地图内容将是半随机的。例如,玩家角色将在每个地图上具有专用的生成点,但是敌人角色将在允许生成的任何图块上随机生成。一些瓷砖也会产生诸如宝箱之类的东西,而其他瓷砖将具有特殊属性,例如水砖仅可由水单元穿过等。
现在,这就是一个简单的地图,所有的精灵都是占位符。简单地说,六角形瓷砖是障碍物,X瓷砖是不可通行的墙壁,显示地图的边框(最终产品地图尺寸可能会有所不同)
游戏将使用广度优先的搜索算法来实现战术风格的回合运动,因此我知道哪些图块因某种原因而成为障碍是至关重要的。
如果您有任何疑问,我很乐意回答。
我也看到Tiles引用了gameObject属性,但我还没有看到任何使用它的例子。
对于每种类型的基础地形,您可以在tilemap中有一个图层,并将脚本附加到每个地形图层,指定允许哪些类型的单位输入属于该图层的图块。一些空间可能具有重叠的图块层。例如,山脉可能有“陆地”瓦片和“山”瓦片。
然后,当您进行寻路计算时,您只考虑具有至少一个平铺的空间(以防止单位移出地图),并且允许单位类型输入该空间上的每种类型的平铺。像这样的东西:
public class TerrainLayer : MonoBehaviour
{
public bool canAirUnitsEnter;
public bool canLandUnitsEnter;
public bool canSeaUnitsEnter;
}