如何用 MaxScript 中的旋转器控制多个 V-Ray 灯光

发布于 2026年02月26日 | 从西班牙语翻译
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 中叛逆 spinner 的困境 🎚️💡

¡Vaya lío de luces y spinners te has montado! 你的灯光和 spinner 搞得一团糟!看起来你的控件在玩“最后进来的赢”。我们来像优秀代码侦探一样解决这个 spinner 身份问题。

概念问题

发生的情况是:

“没有上下文的 handler 就像没有布线的开关:点击了但不会点亮任何有用的东西”

技术解决方案

你需要创建 闭包 来捕获正确的上下文。试试这个方法:

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. 使用闭包,让 handler “记住”要修改哪个灯光
  3. 避免使用全局引用,因为它们会被覆盖

如果这个不起作用(有时 MaxScript 的 handler 系统很特殊),另一个选项是:

记住:在 MaxScript 中,就像生活中一样,上下文就是一切。让你的 spinner 照亮正确的道路!💡 如果一切失败,你总是可以像电影里那样:“更多灯光!”(尽管渲染会花费永恒的时间)。