Fujiko Tomorrow
2007年12月10日
17:11
お友達Niziさんの知り合いの方から 偽物のベンチを作って欲しいという話がありまして^^
依頼された方によると、
campを待っている間は暇なので、横に偽物のcampベンチを置いて、そこに座って待っていようとの事らしいのです。
まったく、おもしろいことを考えつくものです
ベンチ本体はお友達のMikoさんが作ったので、私は、ベンチに付いているボールのスクリプトを担当させていただくことになりました^^
座ったら消えて、立ったらまた現れる あのボールです。
さて、今回は少しだけスクリプトの話もしてみましょう。
といっても私も詳しいわけではないですし、あの暗号みたいな文をそのまま載せても
興味のない方は誰も読まないでしょう。
だから、分かりやすくイメージだけ載せておきます。
まず、ボールが消えたり現れたりするのは、llSetAlphaという関数で透明度を変化させることができます。
この値が0だと完全に消えて、1だと普通に見えるようになります。これは、前回のクマちゃんでも使った関数なので問題なし。
次は、座ったり立ったりする状態をどうやって認識するかなんですけど、これはクマちゃんとは少し勝手が違うんですよね。
クマちゃんの場合は、
「アバターが座ったり立ったりする ⇒ そのアバターが装着しているオブジェクト(クマちゃん)が変化する」
今回は、
「アバターが座ったり立ったりする ⇒ そのアバターが座ったオブジェクト(今回はボール)が変化する」
これがビミョ~に違うんですよね
今回の場合は、前回使った関数は使えないみたいです^^;
で、いろいろと調べてみると、オブジェクトに座っているというのは、そのオブジェクトとリンクしているのと同じこと
らしいので、Change いうイベントが使えるみたいです。
このイベントを用いれば、オブジェクトのリンクが変化したことを感知することができるので、
ボールに立ったり座ったりするという変化を判断することができます^^
あとは、これらを組み合わせて、座った状態では消えるようにして、立った状態では見えるように設定すればいいわけです!!
↓ こんな感じです
しか~~し! ここで大きな問題が
この偽物ベンチ、常に同じ場所に置いておくわけではなく、使うときは持ち物の中から地面に置いて使うので、
ボールは3つともベンチ本体にリンクさせて、1つのオブジェクトにまとめてしまわなければならないのです。
すると、どうなるか……
お察しの通り、このままだと3つとも一緒に消えたり現れたりするんですよ^^;
ボールは3つともリンクされてくっついているので、同時に反応してしまうんですねぇ。
(通じますか??^^; 分かりにくくてスミマセン)
ボールが1個しかない一人掛けの椅子なら、この考え方でも問題はないんでしょうけど、失敗なんです これは(^^;)
さて困った(>_<)
リンクが変化したときに、アバターが座っているボールと そうでないボールがあるわけで
それらをどうにかして区別しなければならないのです。
無い知恵を振り絞って考え 考え………
ついに見つけました!!
llAvatarOnSitTargetという関数がありました^^
この関数、オブジェクトに座っているアバターのIDを調べる関数でして、
これを使えば、
「調べたIDに該当者がいない ⇒ 座っているアバターがいない」
逆に
「該当者がいる ⇒ 座っているアバターがいる」
という判断ができるわけです。
この原理を使えば、アバターがいるかいないかで反応を変えることができるようになるはず!
↓ こんなイメージです
よしっ^^
真ん中のボールに座っても 左右のボールは消えないですね
思ってたより手こずりましたけど、なんとか成功しました(^_^)v
やった~~^^