Это совсем не похоже на вопрос "новичка".Кажется довольно ясным, что вы просто хотите уложить плитки программно, а не через редактор.
Я столкнулся с тем же вопросом, потому что я хотел заполнить свои плитки на основе генератора ландшафта.Мне удивительно, что документации так не хватает в этом отношении, и каждый урок, кажется, предполагает, что вы вручную создаете макеты своих плиток.
Вот что сработало для меня:
ЭтоПервый фрагмент не отвечает на ваш вопрос, но вот мой тестовый код для укладки чередующихся плиток в шахматном порядке (у меня просто две плитки, «вода» и «земля»)
for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; y++)
{
Vector3Int p = new Vector3Int(x,y,0);
bool odd = (x + y) % 2 == 1;
Tile tile = odd ? water : land;
tilemap.SetTile(p, tile);
}
}
Чтобы получитьВ экземпляре Tile
я обнаружил, что работают два разных метода:
Метод 1: подключение плиток к свойствам с помощью редактора
В классе MonoBehaviour
где вы пишете код для программной генерации макета плитки, предоставьте несколько открытых свойств:
public Tile water;
public Tile land;
Затем в Unity Inspector эти поля появятся.Если вы нажмете на маленькое яблочко рядом с этими свойствами, откроется окно «Выбор плитки», в котором вы сможете увидеть любые плитки, ранее добавленные в палитру плиток
Метод 2:Программно создать плитку из текстуры в папке ресурсов
Если у вас много разных типов плиток, ручное подключение свойств, как описано выше, может стать утомительным и раздражающим.
Также, если у вас есть какая-то интеллектуальная схема именования для ваших плиток, которую вы хотите использовать в коде, возможно, будет более целесообразно использовать этот второй метод.(например, может быть, у вас есть четыре варианта воды и четыре земли, которые называются water_01, water_02, water_03, water_04, land_01 и т. д., тогда вы можете легко написать некоторый код для загрузки всех текстур "water _" + n для n от 1 доnumVariants).
Вот что мне помогло загрузить и создать плитку из текстуры 128х128, сохраненной как Assets/Resources/Textures/water.png
:
Tile water = new Tile();
Texture2D texture = Resources.Load<Texture2D>("Textures/water") as Texture2D;
water.sprite = Sprite.Create(texture,
new Rect(0, 0, 128, 128), // section of texture to use
new Vector2(0.5f, 0.5f), // pivot in centre
128, // pixels per unity tile grid unit
1,
SpriteMeshType.Tight,
Vector4.zero
);