2007年5月10日木曜日

【LSL】ドアとスライドする窓

某所に作った私の別荘。いろいろスクリプトを仕込みましたので、何回かに分けて紹介します。
今回は建物の作った「クリックすると開くドア」と庭に出るための「スライドする大きな窓」です。


【クリックすると開くドア】
スクリプト(lsl)についてはこちらのブログを参考に作りました。
【Makapu】ドアを作ろう(初級スクリプト第五回)
こちらのブログはlslを丁寧に紹介されています。
今回のドアのスクリプトに関して言えば、「ドアの状態」「回転の処理」「タイマーの設定」と、順序よく解説されているので、応用も考えやすいです。

・・・なんだかブログの紹介になってしまいました。

【スライドする大きな窓】
上のドアの応用で作ったのがこのスライドする窓(掃出し窓っていうんだっけ?)です。
上のスクリプトからタイマー系の部分を削除して、回転ではなく大きさを変えることで、窓がスライドしているように見せているだけです。
スクリプトはこんな感じ
vector scale;
vector pos;

default
{
state_entry()
{
scale = llGetScale();
pos = llGetPos();
state close;
}
}

state open {
state_entry()
{
llSetScale(scale+<-4.4, 0.0, 0.0>);
llSetPos(pos+<-2.2, 0.0, 0.0>);
}

touch_start(integer total_number)
{
state close;
}
}

state close {
state_entry()
{
llSetScale(scale);
llSetPos(pos);
}

touch_start(integer total_number)
{
state open;
}
}

llSetScale(scale+<-4.4, 0.0, 0.0>);<-4.4, 0.0, 0.0>
llSetPos(pos+<-2.2, 0.0, 0.0>);<-2.2, 0.0, 0.0>
自分の作ったプリムのサイズに合わせて適宜変更すれば大丈夫です。
(動けばいいという感じで作ったので、面倒と言えば面倒ですが)

数値の出し方はざっとこんな感じで(適当だなぁ)
まぁ、小さくしたときの大きさと座標を控えておいて、引き算するのが一番手っ取り早いです。

テクスチャーや大きさを変えればカーテンにも応用できますね。