これまで「玉」しか作ってなかったから(笑)、Rotation ってあまり意識してなかったんですよね。。。
HUD にすると必ずオブジェクトを Rez した時の
これでも・・・編集で回転すればいいのだけど、それはちょっと面倒ですね。
立方体であれば
そこでこの状況を回避するために attach イベント時にこの Rotation の値を変更することで、見せたい面を HUD の正面とすることが可能なんですね。つまりは、HUD の場合には必ずいれるべきスクリプト、、、なのでしょう。 今頃、、、気がつきました。(笑
</X,Y,Z>
HUD 状態で YazPod を編集モードにして Rotation の値を変えて、本来見せたい向きにしてみます。これがその状態です。
すると、Y軸 で 90度、Z軸でも 90度 回転させたことがわかります。
この状態を Script で装着時に設定してあげればいいわけですよね。
そこで使ったのが関数としては llSetPrimitiveParams で、イベントは attach です。
attach(key id) {
if (id != NULL_KEY) {
vector d =<0,90,90>; //Degree(度) で値を設定
d *= DEG_TO_RAD; //DEG_TO_RAD を使って、度をラジアンに変更
rotation q = llEuler2Rot(d); //変数 d を Rotation 型の変数 q に変換・代入
llSetPrimitiveParams([PRIM_ROTATION,q]); //q の値を ROTATION に設定
}
}
装着というイベント(attach) で動くスクリプトが attach(key id) { } で囲まれています。
装着された時は key 型の変数 id に装着した Avatar の KEY が入ります。逆に、装着解除(要は、はずす、、)した場合は、変数 id には NULL_KEY が入ります。つまり、attach イベントは装着するときもはずすときもイベントとして発生します。
なので、装着した時だけ・・・なので if (id != NULL_KEY) という条件式をいれてあげました。
装着した時だけの if (id != NULL_KEY) { } では、llSetPrimitiveParams を使って パラメータの Rotation の値を設定しています。
ここで注意は、編集モードのオブジェクトタブの Rotation でみた数値は「度」であるのに対して、値はラジアンを使うんですよね。
このあたりはたしか Miz さんの Makapu ブログや多くの方がすでに説明されているので割愛しますが、、、はまりポイントでもあるので注意ししなくてはいけませんね~。
Degree(度) を Radian(ラジアン) に変換してRotaion(ローテーション) 型に変更して ROTATION に設定、、、となります。
と、、、単純な HUD の装着だけでもいろいろな考慮点があるんですね~。
勉強になりました。
0 件のコメント:
コメントを投稿