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

デバッグ・調査

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

「このオブジェクト、何ができるんだっけ?」を その場で調べる ための道具です。リファレンスを引く前に、まずリスナーで実測するのが速いことも多いです。

クラス・型を調べる

classOf $          -- そのオブジェクトのクラス(例: Box)
superClassOf $     -- スーパークラス(例: GeometryClass)
isKindOf $ GeometryClass   -- 「〜の仲間か」を true/false で
classOf $.material -- マテリアルのクラス

プロパティを一覧する

showProperties $          -- 変更できるプロパティ名を一覧表示
getPropNames $            -- プロパティ名を配列で取得(プログラムから扱える)
show $                    -- プロパティ名 + 現在値をまとめて表示
showProperties $.bend     -- モディファイアのプロパティも同様に調べられる
  • ⚠️ showProperties表示するだけ(戻り値は OK)。名前を配列で使いたいときは getPropNames を使います。

プロパティ名のパターン検索

showProperties $ "*color*"    -- "color" を含むプロパティだけ表示

-- getPropNames の結果を自分で絞り込みたいとき
(getPropNames $) as array
for p in (getPropNames $) where (matchPattern (p as string) pattern:"*color*") collect p
  • プロパティが多いクラスでは、ワイルドカードで 目的のプロパティだけ 絞り込めます。
  • getPropNames はワイルドカード引数を取らないため、matchPatternfor ... where ... collect を組み合わせてフィルタします。

関数・グローバルを横断検索する

apropos "render"          -- 名前に "render" を含む関数・変数を一覧
apropos "*light*"         -- ワイルドカードも使える
showClass "*modifier*"    -- クラス名で検索
showInterfaces polyop     -- インターフェイス(メソッド群)を調べる
globalVars.gather()       -- 定義済みグローバル変数を集める
  • apropos名前うろ覚えの関数を探す のに最適です。リスナーに出た候補から当たりをつけます。

値を出力して確認する

print x                       -- 値を1つ表示(戻り値も返す)
format "name=% pos=%\n" $.name $.pos    -- 整形して表示
for o in selection do format "% : %\n" o.name (classOf o)

例外を捕まえる(try-catch)

try
(
    -- エラーが出るかもしれない処理
    $DoesNotExist.pos = [0,0,0]
)
catch
(
    format "エラー: %\n" (getCurrentException())   -- 例外メッセージを表示
)
  • ⚠️ 原因を知りたいときは getCurrentException() を必ず出力します。catch () で握りつぶすと原因が分からなくなります。

処理時間・メモリを測る

t = timeStamp()
-- ...重い処理...
format "% ミリ秒\n" (timeStamp() - t)   -- 経過時間(ms)

heapSize                  -- 使用中ヒープサイズ
gc()                      -- ガベージコレクション(メモリ回収)
gc light:true             -- 軽量GC

サブアニメ(アニメ階層)をたどる

$.numSubs                 -- サブアニメの数
getSubAnim $ 1            -- 1番目のサブアニメ
$.pos.controller          -- コントローラへ降りていく入口

落とし穴まとめ

  • showProperties は表示専用。配列で欲しいなら getPropNames
  • 名前うろ覚えの関数は apropos で横断検索する。
  • catch では getCurrentException() を出力する。握りつぶさない。
  • classOf はちょうどのクラス、isKindOf は派生も含めた判定。

関連

← MaxScript チートシート へ