ソラマメブログ

2007年12月10日

家を作る:ファントムドア編


タッチして動作するようなドアを作るには、やはりスクリプトが必要です。
個人的に一番簡単だと思うタッチするとファントム(すり抜けられる)化するドアのスクリプトを紹介します。

まずドアになるプリムを作り、編集ウィンドウの「コンテンツ」タブの「新しいスクリプト」ボタンを押します。

すると「Hello Avatar! 」というのがチャットに表示されます。これはこのオブジェクトが喋っているのです。

コンテンツの中に「 New script 」というのが出来ているので、開いてみると

すでにスクリプトが記述されています。このスクリプトの意味を簡単に訳すると

最初に「 Hello,Avatar! 」と言いなさい。
タッチされたら「 Touched. 」と言いなさい。

編集モードを抜けて、実際にタッチしてみると「 Touched. 」と喋ります。

ではさっそく、このスクリプトを編集していきましょう。


以下、タッチするとファントム、もう一度タッチすると元に戻るスクリプトです。
integer OPEN;

default
{
 state_entry()
 {
  llSetStatus(STATUS_PHANTOM,FALSE);
  OPEN = FALSE;
 }

 touch_start(integer total_number) 
 {
  if(!OPEN) 
  {
   llSetStatus(STATUS_PHANTOM,TRUE);
   OPEN = TRUE;
  }
  else
  {
   llSetStatus(STATUS_PHANTOM,FALSE);
   OPEN = FALSE;
  }
 }
}

たったこれだけ。llSetStatus(STATUS_PHANTOM,TRUE)がファントムに設定する記述です。一番最後のTRUEFALSEに変えれば元に戻ります。

なので上のスクリプトを訳すると

最初にファントムを無効にしておきなさい
タッチされたとき、
 ドアが開いていなければファントム化、
 開いていればファントムを無効にしなさい


ということです。ドアが開いているかどうかはOPENという変数にタッチする度にTRUE,FALSEを入れ替える事で判定しています。変数の名前はなんでも良いのですが、分かりやすい名前が良いでしょう。

このスクリプトをコピーしてスクリプトウィンドウにペースト(元のスクリプトは消してください)保存ボタンを押して「 Compile succesful 」と出たらOKです。エラーメッセージが出る場合は、セミコロン等が抜けてしまっている場合が多いですので、今一度チェックし直してください。


タッチするとファントムになるので、すり抜けられます。周りの壁と同じテクスチャにしておいて、隠し扉が出来ます。普通のドアにするなら、ファントムになるとともに透明にしてしまえば、ドアが開いたように見えます。

先ほどのスクリプトに透明度の設定を付け加えます。

integer OPEN;

default
{
 state_entry()
 {
  llSetStatus(STATUS_PHANTOM,FALSE);
  llSetAlpha(1.0,ALL_SIDES);
  OPEN = FALSE;
 }

 touch_start(integer total_number)
 {
  if(!OPEN)
  {
   llSetStatus(STATUS_PHANTOM,TRUE);
   llSetAlpha(0.7,ALL_SIDES);
   OPEN = TRUE;
  }
  else
  {
   llSetStatus(STATUS_PHANTOM,FALSE);
   llSetAlpha(1.0,ALL_SIDES);
   OPEN = FALSE;
  }
 }
}



llSetAlpha(1.0,ALL_SIDES)が透明度の設定です。数値が「1.0」の時、完全不透明。「0.0」にすれば完全に透明に出来ます。上記のスクリプトでは分かりやすいように「0.7」にしてあります。ALL_SIDESは全部の面に設定しなさいという事です。各面ごとに透明度が設定出来ますが、ここでは説明を省きます。

上記のスクリプトをまたコピペして保存し直すと

こんな感じになります。

透明度を「0.0」にすればタッチするとファントム化するとともに、完全に透明になります。透明になるだけで消滅している訳ではありません。もう一度タッチ(透明でもタッチ出来ます)すると元に戻ります。

これはあくまでも基本的なスクリプトです。今の状態では誰がタッチしてもドアが開きます。スクリプトに関しては多くのサイトで詳しく記載されていますので、そちらも一緒に参照してみてください。

これがスクリプトを始めるとっかかりになればこれ幸い。

この記事へのトラックバックURL

http://ogasawara.slmame.com/t86619
この記事へのコメント
ひとつ書き忘れましたが、ファントムドアは家とリンクしてはいけません。なぜなら、リンクされたプリムの中にひとつでもファントム設定のモノがあると、オブジェクト全体がファントムになるからです。

なのでこのドアの場合、タッチした瞬間に家ごとファントム化してしまいます(笑)
Posted by Tako★MASARUTako★MASARU at 2007年12月10日 13:23
こんばんわぁ^^
先日はドアの設置ありがとうございました。
この度、ソラマメに越して来ました。
どうぞ、よろしく^^
今度、ジャイロに乗せてくださいねぇ!
Posted by キャメルキャメル at 2007年12月10日 23:19
>キャメルさん
 どもども。さっそくお気に入りにも登録させて頂きましたよ。
 ジャイロはもうちょいお待ちを(苦笑)
Posted by Tako★MASARUTako★MASARU at 2007年12月11日 18:26