デバッグ・調査
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はワイルドカード引数を取らないため、matchPatternとfor ... 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は派生も含めた判定。
関連
- 調べた結果で対象を絞る: 「選択・取得」章
- ポリゴン関数群の調査(
showInterfaces polyop): 「メッシュ・ポリゴン」章