Как управлять несколькими огнями V-Ray с помощью спиннеров в MaxScript

Опубликовано 29.01.2026 | Перевод с испанского
Captura de interfaz de 3ds Max mostrando múltiples spinners controlando parámetros de diferentes luces V-Ray, con el editor de MaxScript visible.

Дилемма бунтующего спиннера в MaxScript 🎚️💡

¡Vaya lío de luces y spinners te has montado! Какая каша из светов и спиннеров ты устроил! Похоже, твои контролы играют в «последний вошедший побеждает». Давай решим эту проблему с идентичностью спиннеров как настоящие детективы кода.

Концептуальная проблема

То, что происходит, это:

"Обработчик без контекста — как выключатель без проводки: кликает, но ничего полезного не зажигает"

Техническое решение

Тебе нужно создать замыкания для захвата правильного контекста. Попробуй этот подход:

for i = 1 to mat_sel.count do (
    local currentLight = mat_sel[i]  -- Captura la luz actual
    local spinnerName = ("spin_" + (i as string)) as name
    local lightName = (currentLight.name + ": ") as string
    
    -- Crea el spinner con el valor actual
    samp.addControl #spinner spinnerName lightName paramStr type:#integer range:[0,100, currentLight.subdivisiones] fieldWidth:40 align:#center
    
    -- Handler con closure que captura la luz correcta
    on spinnerName changed val do (
        currentLight.subdivisiones = val
    )
)

Ключевое объяснение

  1. Захвати контекст с помощью локальной переменной в каждой итерации
  2. Используй замыкания, чтобы обработчик «помнил», какой свет модифицировать
  3. Избегай глобальных ссылок, которые перезаписываются

Если это не работает (иногда система обработчиков MaxScript особенная), другой вариант:

Помни: в MaxScript, как и в жизни, контекст — это всё. Пусть твои спиннеры освещают правильный путь! 💡 А если всё провалится, всегда можно сделать как в кино: «Больше света!» (хотя потом рендер будет длиться вечность).