Маскирование и сортировка текста в 2D-игреC#

Место общения программистов C#
Ответить
Anonymous
 Маскирование и сортировка текста в 2D-игре

Сообщение Anonymous »

Я создаю 2D-игру в Unity с простыми картами, которые можно перетаскивать из руки и играть в них посередине игрового пространства. Карты создаются из нескольких спрайтов GameObject вместе со связанными с ними дочерними элементами. В дополнение к этому, на картах должен быть текст, который можно изменить в скрипте (каждая отдельная карта может быть изменена игровыми событиями, поэтому она должна отличаться от префабов). Текст на картах не может быть статичными спрайтами. поэтому я пытаюсь найти работающее решение.
Первой идеей было использовать TextMeshPro, но я не могу использовать его в спрайте. Средство рендеринга спрайтов и сетка являются взаимоисключающими. Это означает, что я не могу использовать 2d-порядок сортировки Unity для управления его видимостью. Текст будет либо перекрыт каждым объектом-спрайтом, либо будет плавать поверх объектов-спрайтов. Никакого промежуточного звена, что для карточной игры бесполезно. Я пробовал создавать объекты-спрайты или холсты, а затем добавлять TMP в качестве дочернего объекта, но не нашел способа заставить его действовать как 2D-объект для целей сортировки.
Вторая идея заключалась в использовании TextMeshPro (UI) на холсте. Для перетаскивания карточек и их правильной укладки отлично работает порядок сортировки Unity для 2d-объектов. Однако мне бы хотелось иметь возможность маскировать карты как специальный эффект. Например, создайте эффект «горения», распространяющийся вверх по карте, или сканирующий «импульс», который маскирует карту из центра расширяющегося круга. Все объекты-спрайты маскируются так, как и следовало ожидать, но, поскольку TMP является объектом пользовательского интерфейса, он игнорирует маски спрайтов.
Вся документация, которую я могу найти по этому поводу, сильно устарела. . Я использую неправильный тип объектов? Есть ли способ замаскировать отсутствующий TMP (UI)?
Текущий код реализации использует TMP (UI). В Обновлении у меня есть следующее:

Код: Выделить всё

        if (beingPlayed && !moving && countdownToBurn > 0)
{
countdownToBurn -= Time.deltaTime;
if (countdownToBurn = ZoneConfig.cardBurnScaleAdder * ZoneConfig.cardBurnScaleMult)
{
stage.PlayCard(thisCard);
thisCard.DestroyCard();
Destroy(burnMask);
}
}
Некоторые основы: когда игрок отпускает карту, она перемещается в центр экрана и остается там на секунду или две (обратный отсчетToBurn), затем создается спрайт-маска из префаба (burnMask), который начинается с небольшого размера, а затем увеличивается на заданную величину при каждом обновлении (ZoneConfig.cardBurnScaleAdder). Как только маска достигает определенного порога (ZoneConfig.cardBurnScaleMult), маска становится больше карты, и ее можно безопасно «разыграть», а затем уничтожить.
Все вышеперечисленное работает, за исключением маска не влияет на TMP (UI) карты.
Всем спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... in-2d-game
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»