2008年03月20日
ドアと窓を作ってみる(その1 - ドア編)
家づくりの最後はドアと窓です。まずはドアから作ってみましょう。
ドアの基本的な機能として、普段は閉じていて侵入者を防ぐ、家の主もしくは関係者が来たときは開いて中に入れる、中に入った後は再び閉まる、といったところでしょうか。スクリプトを入れる前にまず、ドアをつくります。右クリックから「作成」を選び、ボックスを作っておいてから、それを伸ばして一枚の板にしてドアにします。テクスチャーはとりあえずあるものの中から適当に張っておきましょう。もちろん自分でカッコ良いドアのテクスチャーを作ってはってもOKです。わたしはとりあえず間に合わせてで下の写真のようなものを作ってみました。

このドアにスクリプトを入れてみます。スクリプトは下記のものをコピー・ペーストして使ってください。
やり方はオブジェクトの編集メニューからコンテンツのタブを選び「新しいスクリプト」ボタンを押します。するとHello Avatar! というスクリプトが出てきますので、これをすべて消して下記のスクリプトをそこにコピー・ペーストします。保存をすることを忘れないでください。名前もNew ScriptとなっているのをDoorScriptとか何か適当な名前に直しておきましょう。
最初から3行目の vector MOVE_TO=<1.0,-1.0,0.0>; の数値は作るドアの大きさ、取り付ける場所などによって微妙に変わってきます。実際にドアの開閉をしながら微調整をしてみてください。
llSetText("Staff Only", <1.0,1.0,1.0>,1.0); はドアの上にStaff Only という文字を表示させるためのものです。この表示が必要ない場合はこの命令自体をとってしまうか、Staff Only を消して "" だけにしてください。
ドアは開けてから5秒後に自動的に閉まるように設定されています。開けてから閉まるまでの間隔を調整するのは llSetTimerEvent(5.0); の値を 5.0 から変えてやります。また、5秒経たなくてもタッチすれば閉まるようになっています。
rotation rot;
vector pos;
vector MOVE_TO = <1.0,-1.0,0.0>;
default
{
state_entry()
{
llSetText("Staff Only",<1.0,1.0,1.0>,1.0);
llSetSitText("");
llSetTouchText("Enter");
pos = llGetLocalPos();
rot = llGetRot();
state close;
}
}
state open
{
state_entry()
{
llSetRot( rot*llEuler2Rot(<0.0,0.0,90.0>*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" というメッセージが出るようになっています。オブジェクト(プリム)にはそれを作成したときに作者がアクティブにしていたグループが設定されています。オブジェクトのグループ設定を変えたい場合は編集メニューの一般というタブを選びグループの設定を変えることができます。(下の写真参照)

さあ、これでドアの完成です。ちゃんと開いていますね^^

次回は窓をつくります。中が見えないようにカーテンをかけて、さらにそれが開け閉めできるようにします。
ドアの基本的な機能として、普段は閉じていて侵入者を防ぐ、家の主もしくは関係者が来たときは開いて中に入れる、中に入った後は再び閉まる、といったところでしょうか。スクリプトを入れる前にまず、ドアをつくります。右クリックから「作成」を選び、ボックスを作っておいてから、それを伸ばして一枚の板にしてドアにします。テクスチャーはとりあえずあるものの中から適当に張っておきましょう。もちろん自分でカッコ良いドアのテクスチャーを作ってはってもOKです。わたしはとりあえず間に合わせてで下の写真のようなものを作ってみました。

このドアにスクリプトを入れてみます。スクリプトは下記のものをコピー・ペーストして使ってください。
やり方はオブジェクトの編集メニューからコンテンツのタブを選び「新しいスクリプト」ボタンを押します。するとHello Avatar! というスクリプトが出てきますので、これをすべて消して下記のスクリプトをそこにコピー・ペーストします。保存をすることを忘れないでください。名前もNew ScriptとなっているのをDoorScriptとか何か適当な名前に直しておきましょう。
最初から3行目の vector MOVE_TO=<1.0,-1.0,0.0>; の数値は作るドアの大きさ、取り付ける場所などによって微妙に変わってきます。実際にドアの開閉をしながら微調整をしてみてください。
llSetText("Staff Only", <1.0,1.0,1.0>,1.0); はドアの上にStaff Only という文字を表示させるためのものです。この表示が必要ない場合はこの命令自体をとってしまうか、Staff Only を消して "" だけにしてください。
ドアは開けてから5秒後に自動的に閉まるように設定されています。開けてから閉まるまでの間隔を調整するのは llSetTimerEvent(5.0); の値を 5.0 から変えてやります。また、5秒経たなくてもタッチすれば閉まるようになっています。
rotation rot;
vector pos;
vector MOVE_TO = <1.0,-1.0,0.0>;
default
{
state_entry()
{
llSetText("Staff Only",<1.0,1.0,1.0>,1.0);
llSetSitText("");
llSetTouchText("Enter");
pos = llGetLocalPos();
rot = llGetRot();
state close;
}
}
state open
{
state_entry()
{
llSetRot( rot*llEuler2Rot(<0.0,0.0,90.0>*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" というメッセージが出るようになっています。オブジェクト(プリム)にはそれを作成したときに作者がアクティブにしていたグループが設定されています。オブジェクトのグループ設定を変えたい場合は編集メニューの一般というタブを選びグループの設定を変えることができます。(下の写真参照)

さあ、これでドアの完成です。ちゃんと開いていますね^^

次回は窓をつくります。中が見えないようにカーテンをかけて、さらにそれが開け閉めできるようにします。
Posted by Jamaica at 15:22│Comments(4)
│家づくり
この記事へのコメント
こんにちわ。
いつも、参考にさせて頂いております^^
ちょうど今、家を作成中でドアのスクリプトを探していた所で。。。
とっても参考になりました。
はじめ、パスカットせずに作成して、回転軸が合わず悩みましたが><
なんとかドアを作ることができました。
ありがとうございます。
今後も参考にしたいので、こちらのブログをリンクさせて頂けたら幸いです。
いつも、参考にさせて頂いております^^
ちょうど今、家を作成中でドアのスクリプトを探していた所で。。。
とっても参考になりました。
はじめ、パスカットせずに作成して、回転軸が合わず悩みましたが><
なんとかドアを作ることができました。
ありがとうございます。
今後も参考にしたいので、こちらのブログをリンクさせて頂けたら幸いです。
Posted by Arata (新) at 2008年03月31日 17:01
こんにちは、Arataさん。
お役に立ててうれしいです。
ブログのリンクもさせていただけるとのことでありがとうございます。今後もいろんなものづくりを取り上げていきたいと思いますのでよろしくお願いします。
お役に立ててうれしいです。
ブログのリンクもさせていただけるとのことでありがとうございます。今後もいろんなものづくりを取り上げていきたいと思いますのでよろしくお願いします。
Posted by Jamaica at 2008年03月31日 20:22
はじめまして、まだ初めて1か月の初々しい新人です(←自分で言うかぁ・・・w)
ドアの作り方を探しててここにたどり着きました!
大変わかりやすく参考になりました(^◇^)
その他の情報もすごく使えるものが多く
これからも参考にさせていただきます!
ドアの作り方を探しててここにたどり着きました!
大変わかりやすく参考になりました(^◇^)
その他の情報もすごく使えるものが多く
これからも参考にさせていただきます!
Posted by tktktk at 2008年06月15日 10:04
tktktkさん、初めまして^^
お役に立ててうれしいです。
今後ともよろしくお願いします。
お役に立ててうれしいです。
今後ともよろしくお願いします。
Posted by Jamaica
at 2008年06月16日 12:45
