Site search
2008年6月25日水曜日
スライドするドアのスクリプト
今回はガラガラって開ける引き戸のスクリプトです。(音は鳴りませんw)
ドアの角度やサイズから計算して開いた位置を自動設定するようにしましたので、難しい設定は全く必要ありません。タッチで開閉、開けっ放しは10秒で閉まります^^
ドアのオブジェクトはX方向が厚み、Y方向が幅で作ってください。
スライドする距離はドアの幅の95%(0.95)にしてます。
ドアの位置や角度を変えたときはスクリプトをリセットしてくださいね。(スクリプトを開いて右下にあるボタン)
// 引き戸
vector open;
vector pos;
vector size;
default
{
state_entry()
{
pos=llGetPos(); // 閉じた位置
size=llGetScale(); // サイズ
vector rad=llRot2Euler(llGetRot()); // 角度
float x=-llSin(rad.z)*size.y*0.95;
float y=llCos(rad.z)*size.y*0.95;
open=<pos.x+x,pos.y+y,pos.z>; // 開いた位置
}
touch_start(integer total_number)
{
llSetTimerEvent(0); // タイマー停止
if (llGetPos() != pos) { // 閉じてないときは
llSetPos(pos); // 閉じる
}
else { // そうでないときは
llSetPos(open); // 開く
llSetTimerEvent(10); // 10秒後にtimerイベント
}
}
timer()
{
llSetTimerEvent(0); // タイマー停止
llSetPos(pos); // 閉じる
}
on_rez(integer start_param)
{ // rezのときはリセット
llResetScript();
}
}
ドアの角度やサイズから計算して開いた位置を自動設定するようにしましたので、難しい設定は全く必要ありません。タッチで開閉、開けっ放しは10秒で閉まります^^
ドアのオブジェクトはX方向が厚み、Y方向が幅で作ってください。
スライドする距離はドアの幅の95%(0.95)にしてます。
ドアの位置や角度を変えたときはスクリプトをリセットしてくださいね。(スクリプトを開いて右下にあるボタン)
// 引き戸
vector open;
vector pos;
vector size;
default
{
state_entry()
{
pos=llGetPos(); // 閉じた位置
size=llGetScale(); // サイズ
vector rad=llRot2Euler(llGetRot()); // 角度
float x=-llSin(rad.z)*size.y*0.95;
float y=llCos(rad.z)*size.y*0.95;
open=<pos.x+x,pos.y+y,pos.z>; // 開いた位置
}
touch_start(integer total_number)
{
llSetTimerEvent(0); // タイマー停止
if (llGetPos() != pos) { // 閉じてないときは
llSetPos(pos); // 閉じる
}
else { // そうでないときは
llSetPos(open); // 開く
llSetTimerEvent(10); // 10秒後にtimerイベント
}
}
timer()
{
llSetTimerEvent(0); // タイマー停止
llSetPos(pos); // 閉じる
}
on_rez(integer start_param)
{ // rezのときはリセット
llResetScript();
}
}
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿