startPosition | 要从中检索瓦片的范围的起始位置。 |
endPosition | 要从中检索瓦片的范围的结束位置。 |
positions | 给定范围内瓦片的位置。 |
tiles | 给定范围内的瓦片。 |
int 返回检索到的位置和瓦片的数量。
检索给定范围内的瓦片数组,包括起始位置和结束位置处的单元格。此方法从给定的起始位置开始,遍历所有可用的 Z 位置,然后遍历 X 和 Y 位置,直到到达结束位置。
此方法从给定的起始位置开始,并且包含此起始位置处的单元格。它检索给定单元格中的所有瓦片,包括该单元格位置的所有 Z 位置处的瓦片。检索完当前单元格中所有可用的瓦片后,该方法继续沿同一行迭代到下一个单元格,直到到达 Tilemap 的最右边界。到达 Tilemap 沿初始单元格行的末尾后,该方法然后沿初始行上方的下一行单元格迭代,从 Tilemap 的最左边缘开始。该方法继续以这种模式迭代,直到到达给定范围的结束位置处的单元格。
如果起始位置的值高于结束位置的值,则该方法从起始位置处的单元格开始,但以与通常方法相反的方向迭代,直到到达结束位置处的单元格。
如果作为参数传入的数组的大小小于范围内的瓦片数量,则数组不会调整大小,结果将受到限制。
// Retrieves all tiles with a range on the tilemap and prints out the positions and tiles to console using UnityEngine; using UnityEngine.Tilemaps;
public class ExampleClass : MonoBehaviour { void Start() { Tilemap tilemap = GetComponent<Tilemap>(); SetTiles(tilemap);
Vector3Int[] positions = new Vector3Int[16]; TileBase[] tiles = new TileBase[16]; var count = tilemap.GetTilesRangeNonAlloc(new Vector3Int(0, 0, 0), new Vector3Int(5, 1, 0), positions, tiles); for (int index = 0; index < count; index++) { print(positions[index]); print(tiles[index]); } }
// Sets Tiles in a 10 by 10 block void SetTiles(Tilemap tilemap) { Tile tile = ScriptableObject.CreateInstance<Tile>(); TileBase[] tiles = new TileBase[10 * 10]; for (int index = 0; index < tiles.Length; index++) { tiles[index] = tile; } tilemap.SetTilesBlock(new BoundsInt(0, 0, 0, 10, 10, 1), tiles); } }
在上例中,使用起始位置 (0, 0, 0) 和结束位置 (5, 1, 0) 的 GetTilesRangeNonAlloc 将返回一个包含 16 个瓦片的数组:从 (0, 0, 0) 到 (10, 0, 0) 的 10 个瓦片,以及从 (0, 1, 0) 到 (5, 1, 0) 的 6 个瓦片。
如果交换起始位置和结束位置,则使用起始位置 (5, 1, 0) 和结束位置 (0, 0, 0) 的 GetTilesRangeNonAlloc 将返回一个包含 16 个瓦片的数组:从 (5, 1, 0) 到 (0, 1, 0) 的 6 个瓦片,以及从 (10, 0, 0) 到 (0, 0, 0) 的 10 个瓦片。