リファレンス / 3ds Max / MaxScript チートシート

文字列・配列

  • 3ds Max
  • MaxScript
  • チートシート
MaxScript チートシート の章一覧

スクリプトの下ごしらえでよく使う、文字列と配列の操作です。MaxScript 特有の名前・記法に絞って収録します。

文字列の基本

"Hello" + " " + "World"           -- 連結
"abc".count                       -- 文字数
toUpper "abc"                     -- "ABC"
toLower "ABC"                     -- "abc"
(i as string)                     -- 数値→文字列
("3.14" as float)                 -- 文字列→数値

検索・置換・分割

findString "abcdef" "cd"                  -- 見つかった開始位置(無ければ undefined)
substituteString "a_b_c" "_" "-"          -- "a-b-c"(全置換)
replace "abcdef" 2 3 "XYZ"                -- 位置2から3文字を置換 → "aXYZef"
filterString "a, b, c" ", "               -- #("a","b","c")(区切り文字で分割)
trimLeft "  abc"                          -- 左の空白を除去
trimRight "abc  "                         -- 右の空白を除去
  • ⚠️ filterString の第2引数は 区切り文字の集合 です。", " はカンマと空白の両方が区切りになります。

数値の整形(ゼロ埋め・桁数)

formattedPrint 5 format:"03d"        -- "005"(3桁ゼロ埋め)
formattedPrint 3.14159 format:".2f"  -- "3.14"(小数2桁)
"Part_" + (formattedPrint i format:"03d")  -- 連番名 Part_001

文字列を組み立てる(format / stringStream)

format "% を % 回処理\n" "Box" 3          -- リスナーに出力(% が引数で埋まる)

ss = stringStream ""                      -- 文字列バッファ
format "name=%, id=%\n" $.name 1 to:ss    -- バッファに書く
ss as string                              -- 文字列として取り出す
  • format%引数で順に置換 されます。to: で出力先(ファイル・stringStream)を変えられます。

配列の基本

a = #(10, 20, 30)
a[2]              -- 20(1始まり)
a.count           -- 3
append a 40       -- 末尾に追加(破壊的)
a[5] = 99         -- 隙間は undefined で埋まる
deleteItem a 1    -- 1番目を削除
findItem a 30     -- 値30のインデックス(無ければ 0)
  • ⚠️ インデックスは 1 始まりfindItem は見つからないと 0(undefined ではない)を返します。

集める・絞る・並べる

for x in a where x > 15 collect x      -- 条件で集める → #(20,30)
for x in a collect (x * 2)             -- 変換して集める → #(20,40,60)
sort a                                 -- 昇順ソート(破壊的)
amin a                                 -- 最小値
amax a                                 -- 最大値
a + #(50, 60)                          -- 連結
  • for ... collect新しい配列を返す ので、元を壊さず変換・抽出できます。

重複を除く

fn unique arr =
(
    local seen = #()
    for x in arr where (findItem seen x == 0) collect (append seen x; x)
)
unique #(1,2,2,3,3,3)   -- #(1,2,3)

落とし穴まとめ

  • 配列・文字列のインデックスは 1 始まり。
  • findItem / findString の「見つからない」戻り値は前者が 0、後者が undefined
  • append / sort / deleteItem は破壊的。元を残すなら copy する。
  • filterString の区切りは「文字の集合」。意図しない分割に注意。

関連

← MaxScript チートシート へ