Чтобы разметить мини-доску маркерами, показывающими, какие плитки на вашей доске были атакованы, нужно преобразовать координату плитки доски в мировое местоположение на мини-доске.
Преобразование координаты плитки в преобразование мира на мини-доске
Алгоритм преобразования координаты плитки в преобразование мира на мини-доске выглядит следующим образом:
получить коэффициент масштаба мини-доски;
преобразовать координаты плитки в
vector3, используя коэффициент масштаба;повернуть маркер в соответствии с поворотом мини-доски;
вернуть сконструированное преобразование.
Создайте функцию GetDimensions для получения размеров игровой доски:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
Далее вам понадобится процедура для преобразования координат плитки в преобразования на мини-доске:
убедиться, что действующая мини-доска имеется;
получить размеры игровой доски;
получить относительный масштаб плитки в пространстве мини-доски, исходя из размеров самой мини-доски и размеров большой доски;
получить преобразование камеры;
определить вращение, необходимое для поворота оси сетки мини-доски вперёд;
построить повёрнутое смещённое мировое местоположение относительно центра мини-доски;
получить преобразование мини-доски;
добавить смещение мини-доски от центра к местоположению мини-доски, чтобы получить преобразование мини-доски для координаты плитки.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Assets }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { DataTypes }
miniboard<public> := class(creative_device):
...
Размещение маркера на мини-доске
Чтобы разместить маркер на мини-доске, потребуются следующие данные:
координата плитки доски, на которой маркер будет находиться;
должен ли это быть маркер попадания или маркер промаха.
Создайте новый enum для представления типа маркера в модуле DataTypes:
using{/Verse.org/Simulation}
using{/Verse.org/Random}
using{/UnrealEngine.com/Temporary/SpatialMath}
DataTypes<public> := module:
...
marker_type<public> := enum<open>:
Hit
Определите функцию SetMarker для размещения маркера на мини-доске в классе miniboard.
Эта функция выполняет следующие шаги:
убеждается, что действующая мини-доска имеется;
определяет, какой тип сетки маркера использовать: попадание или промах;
получает преобразование мини-доски входной координаты плитки;
создаёт маркер;
добавляет маркер в массив маркеров.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Assets }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { DataTypes }
miniboard<public> := class(creative_device):
...
Описание
Подведём итог. На этой странице вы выполнили следующие шаги:
поместить маркер на мини-доску;
выполнить преобразование между пространством доски, мини-доски и мировым пространством.
Файлы
using { /Verse.org/Simulation }
using { /Verse.org/Random }
DataTypes<public> := module:
tile_coordinate<public> := class<concrete>:
Left<public>:int = 0
Forward<public>:int = 0
bounds<public> := class<concrete>:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Assets }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { DataTypes }
# See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device.
# A Verse-authored creative device that can be placed in a level