Перейти к содержимому

Мировые визуальные объекты

Игра предоставляет WorldVisuals, LineRenderer и SurfaceOverlay. Helpers SDK создают те же нативные объекты, применяют частые настройки одним вызовом и при необходимости удаляют их позже.

Это только клиентское отображение. Такие объекты не создают серверных сущностей, коллайдеров или игровых эффектов.

import { visuals } from "@killscript/sdk/client";
const line = visuals.line({
points: [start, end],
color: new Color(0, 1, 1, 1),
width: 0.02,
duration: 3,
});

Helper задаёт количество позиций и преобразует обычный TypeScript-массив points в индексы от нуля, которые ожидает нативный LineRenderer.SetPosition().

Основные параметры линии:

ПараметрНазначение
pointsУпорядоченные точки в мировых координатах; обязательное поле
colorЦвет всей линии
widthБазовая толщина
progressВидимая доля линии
patternEnabledВключает текстурный паттерн
patternRepeatЧастота повторения паттерна
patternTextureНативная Texture для паттерна
occludedBrightness / occludedTransparencyНативные параметры видимости за препятствием
durationУдаляет объект через указанное число секунд
const marker = visuals.overlay({
position: hit.Point,
size: new Vector3(1, 0.02, 1),
color: new Color(1, 0.2, 0.2, 0.55),
fillBase: 1,
occlusionEnabled: true,
visible: true,
});

Overlay подходит для точки попадания, выделенной области или временной отметки в мире. position и size задаются в мировых координатах. Остальные поля напрямую соответствуют сеттерам нативного SurfaceOverlay.

Оба метода могут вернуть undefined, если игре не удалось создать нативный объект. Учитывайте это перед прямым вызовом его методов:

const path = visuals.line({ points });
path?.SetProgress(0.5);

Для короткого эффекта задайте время жизни:

visuals.overlay({
position,
size: new Vector3(0.5, 0.02, 0.5),
duration: 1.5,
});

Долгоживущий объект можно удалить явно:

visuals.remove(marker);

Или передать во владение включаемому компоненту:

import { scope, visuals } from "@killscript/sdk/client";
const active = scope();
active.world(visuals.line({ points: [start, end] }));
// Удалит линию вместе с компонентом.
active.dispose();

В сгенерированном коде удаление идемпотентно. Ничего страшного, если на один объект одновременно ссылаются duration timer и scope компонента.

Возвращаемые значения остаются нативными LineRenderer и SurfaceOverlay. Для редкого изменения, которого нет во вспомогательном методе, вызывайте их документированные методы напрямую.