データ型を変換する

 
 
 

Maya ではデータ型を柔軟に取り扱うことができます。2 つの異なるデータ型の間で代入または算術演算を実行すると、必要に応じてデータ型が変換され、構文エラーは報告されません。

ここでは、異なるデータ型の間で生じる変換について説明します。データ型の変換の詳細を理解しておけば、予期せぬアトリビュート値や変数値が発生した場合の原因の解明に役立ちます。

プログラミングの経験がない場合は、データ型を変換しないようにしてください。予期せぬアトリビュート値や変数値が発生して混乱を招く可能性があります。

浮動小数点型のアトリビュートまたは変数に代入する

浮動小数点型のアトリビュートまたは変数にベクトルを代入すると、次の式に従って、ベクトルが浮動小数点数に変換されます。

この式の x, y, z はベクトルの 3 つの要素を表しています。演算結果は、ベクトルのマグニチュードです。

Ball.scaleY = <<1,2,0>>;

ベクトルを浮動小数点数に変換した値が、浮動小数点型の Ball.scaleY アトリビュートに代入されます。

浮動小数点型のアトリビュートまたは変数に整数を代入する場合は、変換は行われません。この場合、変換は不要です。

Ball.scaleY = 1;

値 1 がそのまま Ball.scaleY に代入されます。

整数型のアトリビュートまたは変数に代入する

整数型のアトリビュートまたは変数に浮動小数点数を代入すると、浮動小数点数の小数部分が切り捨てられます。

整数型のアトリビュートまたは変数にベクトルを代入すると、前出の平方根の式に従って、ベクトルが整数に変換されます。演算結果の小数部分は切り捨てられます。

int $pi = 3.14;

整数型変数 $pi に値 3 が代入されます。

int $temp = <<1,2,0>>;

整数型変数 $temp に次の値(ベクトルを整数に変換した値)が代入されます。

これにより、小数部 .2360607 が削除されます。$temp 変数は切り捨てられた値 2 を受け取ります。

ベクトル アトリビュートまたは変数に代入する

ベクトル アトリビュートまたは変数に整数または浮動小数点数を代入すると、ベクトルの各要素にその整数または浮動小数点数がセットされます。

vector $speed = 1.34;

$speed はベクトルなので、$speed には<<1.34,1.34,1.34>>が代入されます。

算術演算子とさまざまなデータ型を一緒に使用する

エクスプレッションの中で異なるデータ型に算術演算子を適用した場合に、データ型がどのように変換されるかを次の表に示します。

演算 演算結果のデータ型
int 演算子 float float
int 演算子 vector vector
vector 演算子 float vector

$velocity というベクトル変数に浮動小数点数 0.5 を掛けます。

$race = $velocity * 0.5;

このエクスプレッションの実行時に $velocity が <<2,3,0>> であった場合、$race 変数には演算結果のベクトル <<1,1.5,0>> が代入されます。

重要:データ型が宣言されていないリテラル定数または変数に対して算術演算を実行すると、その定数または変数の現在値に基づいてデータ型が推定されます。

たとえば、Ball.scaleY = 1/3; という文では、小数点のない 1 と 3 が整数として扱われます。このエクスプレッションでは整数 1 が整数 3 で割られます。結果は整数で商は 0、余りは 1 になります。余りは Maya により切り捨てられます。

Ball.scaleY は浮動小数点型のアトリビュートであるため、除算結果の整数 0 は浮動小数点数 0 (同じ値)に変換され、Ball.scaleY に代入されます。

1/3 の意図通りの演算結果を得るには、Ball.scaleY = 1.0/3.0; と入力する必要があります。

1.0 と 3.0 は小数点があるため浮動小数点数として取り扱われ、1.0/3.0 = 0.33333333333 という結果が得られます。