Как установить плитку в tilemap динамически? - PullRequest
0 голосов
/ 26 февраля 2019

Я использую Isometric Tilemap для создания своей игровой карты.
Я использую версию Unity 2018 3.5f.

Но в каждом руководстве говорилось, что просто используйте палитру, но моя карта плиток немногодинамичный.Таким образом, я могу добавлять, изменять и удалять плитки в тайлекарте во время выполнения (динамически).И я должен прочитать данные плитки из файлов карты XML.Так что я могу добавлять плитки программно.В качестве ссылки есть метод setTile ().Но нет никакого надлежащего примера об использовании этого.Должен ли я сначала создать игровой объект плитки и перетащить его в папку prefabs, чтобы превратить его в prefab плитки.И я должен использовать как это?

setTile(position , TilePrefab.Instantiate());

Могу ли я получить пример того, как использовать setTile для программного добавления плиток.И я новичок в единстве, так что, если вы не возражаете, пожалуйста, дайте больше советов или советов по плитке (просто что-нибудь).

1 Ответ

0 голосов
/ 14 июня 2019

Это совсем не похоже на вопрос "новичка".Кажется довольно ясным, что вы просто хотите уложить плитки программно, а не через редактор.

Я столкнулся с тем же вопросом, потому что я хотел заполнить свои плитки на основе генератора ландшафта.Мне удивительно, что документации так не хватает в этом отношении, и каждый урок, кажется, предполагает, что вы вручную создаете макеты своих плиток.

Вот что сработало для меня:

ЭтоПервый фрагмент не отвечает на ваш вопрос, но вот мой тестовый код для укладки чередующихся плиток в шахматном порядке (у меня просто две плитки, «вода» и «земля»)

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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...