Экранные метки союзников
Этот клиентский пример получает союзников, проецирует их позиции в viewport и показывает имена только для точек перед камерой.
local function DrawAllyLabels() local camera = Cameras.Main local allies = Agents:GetAllies()
if camera == nil or allies == nil then return end
for i = 1, allies.Length do local ally = allies[i]
if ally ~= nil and ally.Movement ~= nil then local worldPosition = ally.Movement.Position + Vector3.new(0, 2, 0) local viewport = camera:WorldToViewportPoint(worldPosition)
if viewport.z > 0 and viewport.x >= 0 and viewport.x <= 1 and viewport.y >= 0 and viewport.y <= 1 then ImGui:DrawTextUV( ally.Nickname, Vector2.new(viewport.x, viewport.y), 14, ally.Color, TextAnchor.MiddleCenter ) end end endend
Scheduler:OnFrame(DrawAllyLabels)Важные детали
Заголовок раздела «Важные детали»Arrayиндексируется с1доLength;WorldToViewportPoint()возвращаетz < 0для точки позади камеры;- viewport использует нормализованные
xиy; - смещение на два метра поднимает подпись над позицией агента;
DrawTextUV()принимает те же viewport-координаты.
Если нужно учитывать видимость или окклюзию, используйте соответствующие свойства агента и не показывайте неопределённые данные скрытого объекта.