如何用统一瓦片图检查不同的瓷砖?

时间:2017-11-19 21:58:46

标签: c# unity3d

我发现只与新的tilemap系统有关的每个例子都只使用GetTile查找一个tile,然后使用“this”对它自己进行检查。 EG。

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

我希望能够检查其他特定的瓷砖。比如我创建了一个带有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)这也行不通。

@Sandro Figo 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."

2 个答案:

答案 0 :(得分:0)

要检查某个位置的瓷砖类型:

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;
}

关于图块的游戏对象:

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

答案 1 :(得分:-1)

试试这个:

private bool HasWallTile(ITilemap tilemap, Vector3Int position)
{
    return tilemap.GetTile(position).gameObject.GetComponent<WallTile>() != null;
}