Skip to main content
 首页 » 编程设计

c#之如何使用 unity tilemap 检查不同的 tile

2024年01月13日37leader

我发现的每个示例都只与新的 tilemap 系统有关,只使用 GetTile 查找一个图 block ,然后使用“this”对其自身进行检查。例如。

private bool HasOtherTile(ITilemap tilemap, Vector3Int position) 
{ 
    return tilemap.GetTile(position) == this; 
} 

我希望能够检查其他特定的图 block 。例如带有我创建的 public class WallTile : TileBase 脚本的 WallTile.asset 磁贴。我真的不知道该怎么做。

我试过用

gameObject.AddComponent(WaterTile) 
 
TileBase tileTest = gameObject.AddComponent(WallTile); 
 
 
private bool HasRoadTile(ITilemap tilemap, Vector3Int position) 
{ 
    TileBase tileTest = gameObject.AddComponent(WaterTile); 
    return tilemap.GetTile(position) == tileTest; 
} 

但这似乎不起作用。

我也试过 ScriptableObject.CreateInstance(WaterTile) 也不起作用。

@桑德罗菲戈 The GetTile method doesn't seem to have an extension method for gameObject it seems.

It returns "T Tile of type T placed at the cell."

请您参考如下方法:

检查某个位置的磁贴类型:

public bool IsTileOfType<T>(ITilemap tilemap, Vector3Int position) where T : TileBase 
{ 
    TileBase targetTile = tilemap.GetTile(position); 
 
    if (targetTile != null && targetTile is T) 
    { 
        return true; 
    } 
 
    return false; 
} 

关于方 block 的游戏对象:

您的图 block 必须继承自 Tile 类而不是 TileBase 才能操纵其游戏对象。