MaxScriptでスピナーを使って複数のV-Rayライトを制御する方法

2026年02月01日 公開 | スペイン語から翻訳
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の反抗的なスピナーのジレンマ 🎚️💡

ライトとスピナーの大混乱ですね! コントロールが「最後に入った者が勝つ」ゲームをしているようです。このスピナーのアイデンティティ問題を、コードの名探偵として解決しましょう。

概念的な問題

起こっていることは以下の通りです:

"コンテキストのないハンドラーは、配線のないスイッチのようなもの:クリックはするが何も有用なものを点灯させない"

技術的な解決策

正しいコンテキストをキャプチャするためのクロージャを作成する必要があります。このアプローチを試してください:

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では人生と同じく、コンテキストがすべてです。スピナーが正しい道を照らしますように! 💡 すべてが失敗したら、映画のように:「もっとライトを!」(ただし、レンダリングが永遠にかかることになります)。