ローカルおよびグローバル変数

MAXScript では、「ローカル」と「グローバル」の 2 つの変数クラスを作成できます。変数がグローバルの場合、プログラム内のどこでもその変数を使用できます。グローバル変数を使用できないのは、その定義位置よりも前だけです。

たとえば、次の行はエラーになります。

sphere radius:rad
global rad = 10

変数「rad」は、それが定義される前には存在しません。

上の行を次のように変更すれば、エラーは発生しません。

global rad = 10
sphere radius:rad

rad」があらかじめ定義されているため、MAXScript はこれを球の定義に使用できます。実際のところ、「rad」はグローバル変数であるため、以降のスクリプトのどこでもこの変数を使用できます。

事前の定義なしに使用可能なグローバル変数が、いくつか存在します。

これらは、システム グローバル変数であり、事前に作成され既定値に割り当てられています。これらの変数の大半は、別の値への再割り当てが可能です。システム グローバル変数の詳細は、『MAXScript リファレンス』の「3ds Max システム グローバル」を参照してください。

グローバル変数とは異なり、ローカル変数は、定義されたブロック内でのみ使用可能です。

ブロックは、ループおよび条件ステートメントなどの、MAXScript コードのグループです。

次に、ループの例を示します。

for i = 1 to 3 do
(
  local rad = 10
  s = sphere()
  s.pos.x = i * 10
  s.radius = rad
)

ローカル変数が有効なのは、ブロック内だけです。このため、ローカル変数の作成はブロック内で行う必要があります。MAXScript のトップ レベルでローカル変数を定義しようとすると、エラー メッセージが表示されます。

上の例では、「rad」というローカル変数を定義しました。この変数は、for ループのカッコ内だけで有効です。他の場所で「rad」を使用しようとすると、エラーが発生します。

rad が特定の値に初期化されていますが、これは必須ではありません。「local」または「global」識別子を使用すると、初期値を割り当てずに変数を定義できます。変数の名前が認識されます。ただし、ソフトウェアには変数のタイプ (名前、数値、カラーなど) は分りません。MAXScript は、特別の値「undefined」を変数に自動的に割り当てます。最初に変数に何かを代入した時点で、割り当てたデータ タイプにより変数が定義されます。実際には、初期値で変数を定義するのが、最も良い方法です。

上の例では、rad だけがローカル変数ではないことに注意してください。変数「s」もローカル変数であり、カッコの外からアクセスすることはできません。すべての変数を「global」または「local」ステートメントを使って宣言する必要はありません。すでに学んだように、変数に値を代入するだけで、変数を暗示的に作成できます。変数に「global」や「local」という区別がない場合、MAXScript は、スクリプト内での変数の定義位置に基づいて適切な関連付けを行います。たとえば、ブロック内で変数を作成すると、MAXScript はその変数をローカル変数として処理します。一方、MAXScript のトップ レベル (すべてのブロックの外部) で作成された変数は、常にグローバル変数になります。すでに説明したように、MAXScript はブロック外部でのローカル変数作成を許可しません。

このことを、次に示します。

次に、ループの例を示します。

for i = 1 to 5 do
(
  global rad = 10
  cyl_height = 25
  c = cylinder()
  c.radius = rad
  c.height = cyl_height
  c.pos.x = i * 25
)
s = sphere radius:rad

この例では、rad、cyl_height、cs の 4 つの変数が作成されます。c および cyl_height は、どちらもブロック内で暗示的に作成されるため、ローカル変数になります。他の 2 つの変数はどちらもグローバルです。s はブロックの外部で作成されるため、また、rad はグローバル変数として宣言されるためです。このため、rad をもう一度使って球 s を定義できます。

次のトピック

カスタム関数の定義