カスタム関数の定義

MAXScript の組み込み関数は非常に強力です。これらの関数を使用すると、オブジェクトにアクセスして、プロパティの読み込みおよび設定を行うことができます。ただし、3ds Max のスクリプト記述には、単にオブジェクトを作成する以上のことが含まれます。幸いにも、MAXScript は独自の関数を作成する機能を備えているため、作業の合理化およびカスタマイズが可能です。

MAXScript では、関数を使ってほぼすべてのソフトウェア操作が可能です。手始めに、2 つの変数の差を求める単純な関数定義を考えましょう。

 

MAXScript により subtract() が返され、関数 subtract が定義されていることが通知されます。

定義には、キーワード function(function の代わりに fn も使用可能)、関数名(subtract)、変数のリスト(x および y)がこの順序で含まれます。 等号記号は、関数本体の開始を示します。本体は、関数を実行する一連のステートメントです。存在するステートメントが 1 つだけであっても、関数本体をカッコで囲む必要があります。

注:

関数本体の内部で作成する変数はすべて、特に指定しない限りローカル変数になります。

関数は、定義完了後に、スクリプト内のどこでも使用できます。このため、スクリプトの最初に関数定義を配置するのは有用です。

関数を使用するには、関数名およびその変数値を入力するだけです。

 

この例では、ポジショナル引数が使用されています。この関数を呼び出す場合、両方の引数を適切な順序で指定しないと、適切に実行されません。

使用可能な 2 番目のタイプの引数は、キーワード引数です。これは、MAXScript のすべてのオブジェクト コンストラクタで使用されます。関数定義は、キーワード引数の宣言 (関数内での変数の既定値の宣言) 以外は同じです。

次の例は、数値が正の値、負の値、またはゼロのいずれであるかを判断します。

例:

function sign val:0 =
(
if val == 0
then messagebox ("Equal to 0")
else if val > 0
then messagebox ("Greater than 0")
else messagebox ("Less than 0")
)

messagebox コマンドにより、メッセージ ボックスが画面に表示されます。メッセージ ボックスには、コマンドに続く括弧内の引数が表示されます。

この例では、関数定義内で、パラメータ val が宣言されています。コロンに続く値は、パラメータの既定値です。関数定義にこうしたパラメータが含まれる場合、これらが関数呼び出しのオプションになります。sign() の関数呼び出しでパラメータを何も指定しない場合、MAXScript は既定値を使用します。

 

val (0) の既定値が使用されるため、メッセージ ボックスには「Equal to 0」が表示されます。ただし、val を以下の様に定義すると、

sign val:-5

 

... 「Less than 0」メッセージが表示されます。キーワード引数は、必要な数だけ含めることができます。関数を呼び出す際、キーワード引数は任意の順序で指定できます。これは、20 ~ 30 のパラメータが関連付けられるオブジェクト作成関数のような関数の場合に役に立ちます。同じオブジェクトをポジショナル引数関数を使用して作成する場合、関数を呼び出すたびに、これらのパラメータすべてを適切な順序で指定する必要があります。

1 つの関数呼び出しで、ポジショナル引数とキーワード引数の両方を使用することもできます。この場合、最初にポジショナル引数を使用し、その後でキーワード引数を使用する必要があります。

function mycube side position:[0, 0, 0] =
(
box length:side width:side height:side pos:position
)

この関数では、立方体のサイズの入力は必須ですが、位置の入力はオプションです。

次のトピック

構造体定義