版本: Unity 6 (6000.0)
语言英语
  • C#

Tilemap.GetTilesRangeNonAlloc

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每个建议修改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议修改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public int GetTilesRangeNonAlloc(Vector3Int startPosition, Vector3Int endPosition, Vector3Int[] positions, TileBase[] tiles);

参数

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 个瓦片。