ページトップへ戻る

DIGITAL DNA
2019.08.12 - 2019.10.12
Max Script 基本文法:変数

目次
「MaxScriptヘルプ」の見かた
デバッグ用に変数の値などを表示したい
スクリプトファイルの拡張子
コメントの記述

・MaxScript基本文法
 ├変数
 ├演算子
 ├文字列
 ├配列
 ├ループ
 ├条件分岐・エラー回避処理
 └関数(Function)



変数
型(データ値)
解説とメモ
代表的な変数の型は下記の表の通りです。
下記のほか、interger、float、double などを扱える「Number値」(Number値クラス)や、true か false の真偽値を格納する「BooleanClass値」、 色を格納する「Color値」、3D行列変換用の「Matrix3値」など他のプログラミング言語ではみられない独特な値(クラス)があります。
C言語(C#)などでみられるlong型はありません。

型名扱える値
integer整数
float32bit浮動小数点
double64bit浮動小数点
string文字列

変数に文字列を代入すると、自動的にstring型になります。


ヘルプ
[HELP] MAXScript 言語リファレンス > 条件 > 基本的なデータ値
[HELP] ヘルプ ファイル内の情報の検索 > クイック ナビゲーション - メイン インデックス > 値とコレクション - クイック ナビゲーション




型変換(キャスト)
解説とメモ
変数の型を変更することを、キャスト、キャスト変換などと呼びます。
例えば integer型の変数 i に 数値10 が代入されている状態で、「10」を数値ではなく文字列の"10"として扱いたい場合は、変数 i を文字列型に変換する必要があります。
変数の型を変換したい場合、as を使います。


基本的な書式
[変数名] as [変換したい型]


記述例
変数 i を文字列型に変換する。
i = i as string


ヘルプ
ヘルプでの記載を見つけられていません。



変数のスコープ(グローバル変数・ローカル変数)
グローバル変数
解説とメモ
グローバル変数とは、プログラム中のどこからでも使うことができる変数です。
プログラムは、複数の「関数」の集まりになっていることがほとんどです。プログラム内のどの関数からでも使うことができるのがグローバル変数です。


基本的な書式
global [変数名] = [代入したい値]


記述例
例1: global i
例2: global i = 0
例3: a = ::i



ローカル変数
解説とメモ
関数の中やループ中だけで有効になる変数を宣言するには、local を使用します。
local の記述が省略されている場合、自動的にローカル変数になります。
ただし、プログラムの先頭でローカル変数を宣言してしまうと「先頭行にローカル宣言がありません」というエラーになります。

基本的な書式
local [変数名] = [代入したい値]


記述例
例1: local i = 1 -- ローカル変数 i を定義して1を代入する
例2: local i = 1, a = 1 -- ローカル変数 iとa を同時に定義して値も代入する。


Max Scriptのサンプル
i = 10 -- 暗黙的にグローバル変数になる
for a = 1 to 3 do
(
	i = 1 -- 暗黙的にローカル変数になる
	a = 1 -- 暗黙的にローカル変数になる
)

リスナーの表示結果
10

解説
上記プログラムの実行後、リスナーには変数 i の値は10が表示されます。
続いて、リスナーに 「a」 と入力すると「undefined」と表示され、変数が宣言されていないことが分かります。
5行目で 変数 a が使用されていますが、ループ内で宣言された変数はループ内でのみ有効で、ループを抜けると無効になります。
for のループ内で宣言した変数 a は、2行目の「for a = 1 to 3 do」で使用している変数 a とは別の扱いになります。

他のプログラム言語と異なる点
max scriptのfor文は、自動的に1ずつ加算されます。ループ中に a++; などと記述する必要はありません。

明示的な変数宣言
上記のサンプルプログラムを「明示的な変数宣言」をした場合、下記のようになります。

Max Scriptのサンプル
global i = 10
for a = 1 to 3 do
(
	local i = 1
	local a = 1
)


ヘルプ
[HELP] MAXScript 言語リファレンス > 変数 - 代入およびスコープ
[HELP] MAXScript トレーニング > 独自のスクリプトの作成 > ローカルおよびグローバル変数
[HELP] よくある質問と回答 > MAXScript の構文と用語 > 変数のスコープとは何ですか。




永続グローバル変数
解説とメモ
通常のプログラミング言語では存在しない特殊な変数で、シーンを保存すると値も保存されるタイプの変数です。
maxを終了するまで値を保持しつづけており、「リセット」(※3ds Maxの画面左上のmaxのアイコンをクリックすると表示されるリセットの機能)を実行しても値が消えることはありません。
maxのヘルプやエラーメッセージでは「存続グローバル変数」と表記されている箇所がありますが、「永続グローバル変数」と同義と思われます。


基本的な書式
presistent global [変数名] = [値]


記述例
persistent global i = 52;


関連
persistent.show() 保持している永続グローバル変数をリスナーに表示する。
persistent.remove 指定した永続グローバル変数を削除。ただし変数と値はグローバル変数として残る。
persistent.removeall() すべての永続グローバル変数を削除。ローカル変数、グローバル変数は残る。


ヘルプ
MAXScript 言語リファレンス > 変数 - 代入およびスコープ > グローバル変数と永続グローバル変数のメソッド > Persistents 構造体