
今回は、スクリプト制御を使ったオブジェクトの回転について試してみたので紹介したいと思います。とりわけ、一定の速度で回転し続けるような動きを作りたい場合に有効だと思います。
スクリプト制御と回転


元となるオブジェクトにスクリプト制御をかけます。ここではメディアオブジェクトとして出しました。

スクリプト制御で扱う回転は3種類、xyz軸回転です。標準描画で普段から使っているのはz軸回転ですね。とりあえず、この三つを覚えておきます。
その他、変数一覧はlua.txtで確認することができます。


スクリプト制御の欄にobj.rz=45と記述しました。
obj.rzはz軸回転でしたね。obj.rzの値として45を入れるとz軸方向にオブジェクトが45度回転します。
このように直接数値を入れるとその分だけオブジェクトが傾きます。

値をマイナスにすると逆方向に回転します。
ただ、これでは回転を動かすことができません。

obj.rz=obj.time*360
obj.rzの値をobj.time*360としました。
obj.timeはオブジェクトの頭からの時間です。1秒経過するとobj.timeの値は1に、2秒経過するとobj.timeの値は2になります。
回転は一周360度なので*360すると、1秒経過する度に一周させることができます。
こんな感じ。結構速いです。
このスクリプトを利用した回転の特徴は、オブジェクトの長さに関わらず常に一定の速度で回転し続けることです。オブジェクトを長くしたり、短くしたりしても速度は変化しません。

r=2 --回転数
obj.rz=obj.time*360*r
今度はr=2として、一秒間に2回転するようにしてみました。
rは任意の文字列で好きに定義して構いません。ここではrotationのrにしてみました。
obj.rz=obj.time*360*rとすることで一秒間にr回転するようになります。
rの値を大きくすることで回転速度を速くすることができます。

t=3 --秒数
r=1 --回転数
obj.rz=obj.time/t*360*r
今度は逆にゆっくり回してみます。
t=3としました。
こちらも同じように任意の文字列で、timeのtです。
obj.time/tとすることでt秒で1になるようにします。つまりt秒で1回転ですね。ここではtに3を入れたので、3秒で1回転とゆっくり回ることになります。
こんな感じ。tとrの値を変えることで、3秒で2回転、20秒で7回転のようにすることもできますね。
複数のオブジェクトを扱う

RA=obj.time*360
obj.rz=RA
他のオブジェクトと連動させることを前提とする場合です。任意の文字列RAにobj.time*360を入れてobj.rz=RAとしました。
これはobj.rz=obj.time*360と同じ意味です。
t=1 --秒数
r=1 --回転数
RA=obj.time/t*360*r
obj.rz=RA
ちなみに、これまでのものと合わせるとこんな感じになります。

複数のオブジェクトを扱う際に、一からスクリプトを何度も書くのは大変です。
そこでRAでオブジェクトが1秒間に1回転すると定義すれば、他のオブジェクトにはobj.rz=RAとするだけで済みます。
また、RA/2で1/2倍速、RA*2で2倍速のように工夫することもできます。
こんな感じ。
他のパラメータで使う

一度定義しておけば、このRAは他の軸回転でも利用することができます。
obj.rx=RAでx軸回転に、obj.ry=RAでy軸回転に適用することもできます。
すべてが連動しているので、RAの内容を変えると他のオブジェクトにも変更が反映されます。
使用例
スクリプト制御を使うことで、オブジェクトの長さに左右されずに回転し続けることができますね。
その他
iv=45 --初期値
t=1 --秒数
r=1 --回数
obj.rz=iv+(obj.time/t*360*r)
回転の初期値を設定したい場合。初期値に入れた値の分だけ傾いてスタートします。
ivも任意の文字列です。好きな文字列に変更可能。
r=1
obj.rz=obj.time/obj.totaltime*360*r --オブジェクトの長さでr回転
obj.time/obj.totaltime*360とするとオブジェクトの長さで1回転します。オブジェクトの長さを短くするほど速く回転し、長くするほどゆっくり回転します。
通常の回転で0から360へ移動させた場合と同じですね。
rを設定しておくとオブジェクトの長さでr回転させることができます。
いかがだったでしょうか。
一定速度で回転し続けるような動きにはスクリプト制御を使うと作りやすいと思います。機会があれば是非試してみてください。