Jamaica
2008年03月20日
15:22
家づくりの最後はドアと窓です。まずはドアから作ってみましょう。
ドアの基本的な機能として、普段は閉じていて侵入者を防ぐ、家の主もしくは関係者が来たときは開いて中に入れる、中に入った後は再び閉まる、といったところでしょうか。スクリプトを入れる前にまず、ドアをつくります。右クリックから「作成」を選び、ボックスを作っておいてから、それを伸ばして一枚の板にしてドアにします。テクスチャーはとりあえずあるものの中から適当に張っておきましょう。もちろん自分でカッコ良いドアのテクスチャーを作ってはってもOKです。わたしはとりあえず間に合わせてで下の写真のようなものを作ってみました。
このドアにスクリプトを入れてみます。スクリプトは下記のものをコピー・ペーストして使ってください。
やり方はオブジェクトの編集メニューからコンテンツのタブを選び「新しいスクリプト」ボタンを押します。するとHello Avatar! というスクリプトが出てきますので、これをすべて消して下記のスクリプトをそこにコピー・ペーストします。保存をすることを忘れないでください。名前もNew ScriptとなっているのをDoorScriptとか何か適当な名前に直しておきましょう。
最初から3行目の vector MOVE_TO=; の数値は作るドアの大きさ、取り付ける場所などによって微妙に変わってきます。実際にドアの開閉をしながら微調整をしてみてください。
llSetText("Staff Only", ,1.0); はドアの上にStaff Only という文字を表示させるためのものです。この表示が必要ない場合はこの命令自体をとってしまうか、Staff Only を消して "" だけにしてください。
ドアは開けてから5秒後に自動的に閉まるように設定されています。開けてから閉まるまでの間隔を調整するのは llSetTimerEvent(5.0); の値を 5.0 から変えてやります。また、5秒経たなくてもタッチすれば閉まるようになっています。
rotation rot;
vector pos;
vector MOVE_TO = ;
default
{
state_entry()
{
llSetText("Staff Only",,1.0);
llSetSitText("");
llSetTouchText("Enter");
pos = llGetLocalPos();
rot = llGetRot();
state close;
}
}
state open
{
state_entry()
{
llSetRot( rot*llEuler2Rot(*DEG_TO_RAD));
llSetPos( pos+MOVE_TO);
llSetTimerEvent(5.0);
}
touch_start(integer total_number)
{
state close;
}
timer()
{
llSetTimerEvent(0);
state close;
}
}
state close
{
state_entry()
{
llSetRot(rot);
llSetPos(pos);
}
touch_start(integer total_number)
{
if(llDetectedGroup(0))
{state open;}
else
{llSay(0,"You are not allowed to enter.");}
}
}
スクリプトをコンテンツタブに入れ、ドアの完成ですが、このときグループ設定をどうするかを確認しましょう。今回のドアスクリプトはオブジェクトに設定されたグループと同じグループの人だけがドア操作できるようになっています。それ以外の人がドアにタッチすると "You are not allowed to enter" というメッセージが出るようになっています。オブジェクト(プリム)にはそれを作成したときに作者がアクティブにしていたグループが設定されています。オブジェクトのグループ設定を変えたい場合は編集メニューの一般というタブを選びグループの設定を変えることができます。(下の写真参照)
さあ、これでドアの完成です。ちゃんと開いていますね^^
次回は窓をつくります。中が見えないようにカーテンをかけて、さらにそれが開け閉めできるようにします。