皆さんの、断食中の面白おかしいエピソードを紹介する『武士は食わねど
バカ楊枝』のコーナーですけど。
全然違うよ! スクリプト講座だろ! そもそも断食中じゃ、面白おかし
いエピソードどころじゃないだろ。
あ、そうでした。タイプミスしちゃった。『なぜなにスクリプト第5回』
ですね。
どういうタイプミスだよ。今回はテレポート装置を作ります。
おお、あの有名な『どこでもドアー……ノブ』ですね?
それは、ただ単にドアノブを持ち歩いている変な人だ。
ヒマな時は、サムターン回しの練習をするの。
以下の原理で動作します。
・オブジェクトに座る場合、座る位置を調整することができます。
・位置の調整はの各方向にオブジェクトの中心から300mまで設定できます。
・座っている状態の時、壁などのオブジェクトをすり抜けることができます。
この3つの原理を使うと、座った途端に違う場所へ移動したように見えます。
ってことでテレポートになります。
なるほど。椅子が吹っ飛んでいくわけですね。じゃ、オブジェクトを布団
にすれば……。
サンプルスクリプトです。
| ------------------------------------------------
default
{state_entry() { llSitTarget(<0,0,10>, ZERO_ROTATION); } } ------------------------------------------------ |
いや、あの……布団が……。
state_entry()イベントの中を見ましょう。
ここでは、まずオブジェクトの座る位置を調整します。
llSitTarget( vector offset, rotation rot )
http://wiki.secondlife.com/wiki/LlSitTarget
vector offset : ここでオブジェクトの中心から、方向に移動した位置に
座るように設定することができます。
rotation rot : ここでは座ったときの向きを調整できます。
向きは意識しなくてよいので、ZERO_ROTATIONという定数を使いましょう。
こうすると、向きはアバターの向きそのままになります。
実際にはこれだけで、テレポートしたことになります。
ねね、すごい面白いの。聞いて! 布団が……。
実際にはこれだけで、テレポートしたことになります。
タッチするだけで座らせる場合には、
オブジェクトのEdit->Generalタブの一番下にある「When Left-Clicked」の部分を
「Sit on object」にします。
これでテレポートボタンみたいな感じにできます。
なるほどね、これはスクリプトじゃなくてオブジェクトでせっていするんですね。それで、布団が……。
以下は、テレポートした後に自動で立ち上がらせるバージョンです。
| ------------------------------------------------ default { state_entry() { llSitTarget(<0,0,10>, ZERO_ROTATION); } changed(integer change) { if(change == CHANGED_LINK){ key id = llAvatarOnSitTarget(); llUnSit(id); } } } ------------------------------------------------ |
changed(integer change)ってのははじめてみるけど、それよりも布団がね、布団が……。
changed(integer change)イベントが追加されています。
これはオブジェクトの色やテクスチャ、形などに変化があると、発生するイベン
トです。
integer change の部分に何が起きたのかを現す数字が入ってきます。
アバターが座った時はオブジェクトにリンクされたとして扱われます。
このリンクされたというのもchangedイベントが発生します。
if(change == CHANGED_LINK){...}という部分ですが、
もしchangeの数字がCHANGED_LINKという意味だったら、{...}の部分を実行する
という
条件をつけています。CHANGED_LINKというのも定数として用意されていて、
リンク発生の意味を持っています。
key id = llAvatarOnSitTarget();
llUnSit(id);
という部分ですが、
座っているアバターを判別して、立ち上がらせるという処理をしています。
移動したという行動を認識して立ち上がるわけですか、で、布団なんだけど!
最後に注意事項です。
バグなのかどうか不明なのですが、llSitTarget()を使用する場合、まれに
別SIMのはじっこに飛ばされたように見えるときがあります。
しばらくすると元に戻ることもありますが、リログが必要なときもありますので、
あくまでも個人用で利用されることをお勧めします。
実は、私もその被害にあったことがあります。それというのも、ふと……。
うるさい。吹っ飛んだんだろ!?
え? なにそれ? 布団が吹っ飛ぶわけないじゃん。リトマスさん、疲れ
てるんじゃない?
クッ……コイツ。
それでは、また次回。せーの!
「あなたのハートをスクリ……」やれよっ!
なにやってるの? ちょっと疲れてるんじゃない? ここに横になりなよ。
おあつらえ向きに布団か。ちょっと横に……うわーっ!!
あ、吹っ飛んだ。
マグスル second life セカンドライフの遊び方マガジン
magsl 2007/06/04











