
サンゴ礁のSIMにちなんで、スクリプトのテーマは「泳ぐ」でお送りします。
ではさっそくスクリプトの紹介から。
~スクリプト~
===================================================
1:string animation_name="swimming-1";
2:key owner;
3:vector size;
4:key agent = NULL_KEY;
5:init()
6:{
7: owner=llGetOwner();
8: llRequestPermissions(owner, PERMISSION_TRIGGER_ANIMATION);
9:}
10:default
11:{
12: state_entry()
13: {
14: init();
15: }
16: attach(key agent)
17: {
18: init();
19: }
20: run_time_permissions(integer perm)
21: {
22: if (perm & PERMISSION_TRIGGER_ANIMATION)
23: {
24: llSetTimerEvent(0.5);
25: }
26: }
27: timer()
28: {
29: size=llGetAgentSize(owner);
30: if ( ((llGround(ZERO_VECTOR)+(size.z/2)+0.3)<=llWater(ZERO_VECTOR)) && (!(llGetAgentInfo(owner)&AGENT_FLYING)) )
31: {
32: llStartAnimation(animation_name);
33: }
34: else
35: {
36: llStopAnimation(animation_name);
37: }
38: }
39:}
===================================================
泳ぐということで、アニメーションのスクリプトと海に入った時の判定スクリプトがメインです。
1行目のstring animation_name="swimming-1"
のswimming-1はアニメーション名です。
今回はデフォルトアニメーションではありませんので別途、泳ぐアニメーションをご用意してください。
そのアニメーション名をswimming-1と置き換えてください。
~海面の高さ~
海に入ったときの判定は、29~30行目です。
LSLでは水面の高さと地面の高さを得る式があるのでこれを応用します。
海に入るということは、「水面が地面よりも高い時」になりますので、
地面の高さ<水面の高さ になります。
地面の高さはllGround(ZERO_VECTOR)
水面の高さはllWater(ZERO_VECTOR)
です。
LSLで書くとllGround(ZERO_VECTOR)
自分のいる位置で高さを判定しているので、このままでは足が水に触れた瞬間に式が成り立ってしまします。
そこで、アバターが腰上まで水に浸かった時に式が成り立つようにします。
ほかの方法もありますが、今回はあえてアバターの身長から算出しています。
身長は29行目のllGetAgentSize(owner)で調べます。
この文は奥行き、幅、高さが得られるのですが、高さ以外はどんなアバターでも同じ数値になります。
ちなみに奥行きは0.45、幅は0.6です。
だったら、高さだけ教えろって感じですが^^;
size=llGetAgentSize(owner)として変数sizeに代入しています。
このままでは奥行き、幅、高さの値がとして入っているので、y(高さ)だけ求めます。
これは簡単で
size.zで求められます。
もののサイズや位置はという形で成り立ってていて、これをvector
型といいます。
この
vector型では変数の名前(今回の例ではsize)の後ろに.xや.yとつけると、xやyの値を知ることができます。
では、腰上あたりを求めるので、+(size.z/2)+0.3としました。(身長/2+30cm)
(llGround(ZERO_VECTOR)+(size.z/2)+0.3)<=llWater(ZERO_VECTOR)
これで、腰上あたりまで水に入ったときに成り立つ式になります。
※不等号は<でも<=でも構いません。「腰上あたり」なので
~飛んでる?~
このスクリプトを作ったときは海底散歩がテーマでつくったので、海底にいる時のみ泳がせました。
なので、飛行中は泳がないようにしてあります。
では飛行を判定するには?
llGetAgentInfo(owner)では下記の様なアバターの行動を知ることができます。
AGENT_FLYING(飛行)
AGENT_ATTACHMENTS (何か装着をしている)
AGENT_SCRIPTED (スクリプトの入ったものを装着している)
AGENT_MOUSELOOK (マウスルックにしている)
AGENT_SITTING (座っている※地面もしくはオブジェクト)
AGENT_ON_OBJECT (座っている※オブジェクトのみ)
AGENT_AWAY (AWAY)
AGENT_WALKING (歩行)
AGENT_IN_AIR (ジャンプ)
AGENT_TYPING (チャット入力している)
AGENT_CROUCHING (しゃがんでいる)
AGENT_BUSY (BUSY)
AGENT_ALWAYS_RUN (「常に走る」になっている)
この中のAGENT_FLYINGで飛行しているか判断します。
llGetAgentInfo(owner)&AGENT_FLYINGがそれですが、
飛行していないばあいは頭に!をつけて否定にします。
!(llGetAgentInfo(owner)&AGENT_FLYING)
これで飛行していない場合になります。
水中判定文と飛行判定文の両方が成り立った時に泳ぐアニメーションを起こすので
30行目の
if ( ((llGround(ZERO_VECTOR)+(size.z/2)+0.3)<=llWater(ZERO_VECTOR)) && (!(llGetAgentInfo(owner)&AGENT_FLYING)) )
となり。
&&でつなげます。
ifは「もし」です。もし~~だったら、~~する。という条件式で
if (A) {B} else {C}と書きます。もしAだったらBをして、AでなかったらCをするという意味です。
要約すると30~37行目は
「もし、アバターが飛ばすに腰上まで水につかっていたら、泳ぐアニメーションをし、
そうでなかったら、泳ぐアニメーションをやめる。」ということになります。
~海で泳ぐ~

このあとは、実際に海にいって泳いできました^^
SIMの名前はMitsubishiCorporation
場所は
http://slurl.com/secondlife/MitsubishiCorporation/129/128/44
です。
ここにはサンゴ教室というものがあり、その奥にこのスクリプトを仕込んだスキューバダイビングセットが
フリーで置いてあります^^
行ってみてくださいね~♪
ちなみにこのスクリプトを応用したものを2点オフィシャルショップに置きました(こっちは有料ですw)
浮き輪と水中スクーターですw
ちなみに浮き輪は、装着すると海に浮きます(当り前かw)移動もできます(それも当り前かw)
着けたまま海に沈むには苦労しますw
水中スクーターは、潜水すると泡と音がでます。ライトもつきます。
以上、宣伝でしたw


投稿者:メルティングドッツ
この記事にコメントする
名前(ニックネーム可)とメールアドレスは必ず入力してください.
メールアドレスは管理者にのみ通知されます.
投稿に時間がかかる場合がございますが、投稿ボタンは2回押さないでください.
![]()
【何をしてあげる?】
You: さて、伺った記念日ですが。実際、どういうことをしてあげられるかな?たとえば誕生日
B: 祝辞とプレゼントぐらい
K: もうすぐりかちゃんの誕生日なんだよ
N: そうだね~
F: ケーキのオブジェ買って、あげるとかね
A: 自分で作ったオブジェとノートカードでお祝いメッセージをあげる
N: プレゼントぐらいかな?
K: そうだらさんは、アクセとか作れるからいいね
F: ジェスチャー作ったりね。
B: ふむむ。作れる人はいいですねえ
You: アイテムをあげるってかんじか
N: う~ん、まだ何も作ってないやw
A: 変なグッズとかひろったのあげたり
K: バレンタインとかホワイトデーはいろんなショップでアイテム配ったり撃ったりしてるけど
You: そういやお店のオープン記念に花贈ったことあったな
A: 僕も花輪あげました
![]()
D: 社長の誕生日のときは、クラッカー使ったりして、ちょっとお祝いしたね。チャット社長で
You: うれしかったです ありがとう
N: ホワイトデーのときは自作のをあげたけどね
F: 一回、ロッキーのファイナルベルの音楽をフルでアップしてそれを誕生日にあげたさw
F: あとは、ナビスルでおめでとう、くらいかな。
A: クリスマスと誕生日がいっしょみたいに
K: パーティーもいいかな
A: プレゼントとクリスマスプレゼントが一緒みたいな
K: みんな集まって踊りくるったり
You: パーティとかね、結婚式とか結構準備が必要だったりしません?
J: お誕生日会は小さい頃はよくやりましたね
【大規模イベントの準備】
F: 結婚式は、披露宴とかあるね。
K: イベントは準備がたいへん
F: この前、結婚式は別のシムの人に設計を頼んでたし
A: 僕はリアルみたいに一張羅を探しに周りましたよ^^;
B: 友達全部にしたら月一ですまなくなるのでは
K: かめさん、牧師衣装さがしまわってたし
A: タキシードとか探して
F: 終わったあとも、お礼を新郎新婦が言ってたし、何気に言葉までコピーできるようにしてたし、乾杯の音頭とか頼まれると、結構考えなきゃねーって思うし。
F: 終わった後に、新郎新婦で挨拶一人一人いってたし
You: 牧師の言葉とかは保存してたねw
F: んだねw速攻で出てきたしw
![]()
K: 1時間のセミナーをやるのに、講師は10時間準備にかける。1日セミナーなら10日が準備期間。ロジスティクス含めると実はもっとたくさんの人日がかかる
F: イベントするには会場設置もそうだし、人集めも大変だしね
You: なんだかんだでイベントは大変ですねー
B: 当日失敗するぐらいだし^^;
F: まぁ、終わったあとはフツーーな毎日だったけどw
A: 最後にはあまりに重くて・・・新婦が一番に落とされてましたし^^;すかさず、司会が「新婦は今・・・お色直しのようです」ってフォロー^^;
F: いろいろと順序もたてないといけないし
You: イベントを準備するときで一人じゃなくみんなで準備するって打ち合わせはSL内?
F: ん~、チャリティコンサートとかは、結構打ち合わせあるですね。お金がどこにいくかとか、明確にしないといけないし、
H: RLの知り合いがいないからSLオンリー
F: 終わった後に、ブログとかでちゃんとRLの写真を使ったりね。
【SLでの年賀状文化】
You: SLの年賀状 だすべき?
C: うい
L: ボクは出す。
H: RLでも出してない・・・w
K: あ。べきってことはないけど、もらうとうれしい
F: ん~、わしは出したね。
C: ノートカードになるのかな?
You: 僕も作りました
A: 僕は、リアルでは枚数が少ないので出してます
K: えびちゃんにもらって、あわてて自分のつくった
B: SSで作れば
M: 出したいけど、実家じゃ出せない・・・^^;
F: SSで送ったw
L: SLSに来なくなった人にも連絡がいくし
A: SLでもあった方がいいと思いますね
D: 今年は、作らなかったな
You: もらうと嬉しいよね
L: それが縁で、またSLに来るようになった人いるよ
F: もらったらうれしいねw
H: 今年貰うまで考えもしなかった(^^;
F: なるw わしは冗談でやったら皆も配ってたから驚いたw
D: もらわなかったから、考えなかった^^;
J: 本当に出したいと思った人に出せばいいと思います。
![]()
You: アメリカの文化ではバースデーカードやクリスマスカードもありますよね
F: ん~、クリスマスカードは無いなー
L: ボクは、海外のフレンドから、クリスマスカードをもらったのがきっかけ
You: IM以外で手軽にSL内の友達に何かを贈る方法があるといいよね
H: Christmas cardは年賀状のようなものでしょ^^
F: IMでの挨拶はあったねー GIMとか。
J: ありましたね
![]()
【住所があればいいのに・・・】
A: そのうち、ポストとかもできたり?
F: ブログでも、書くしね。
You: 家があったら住所作るのありだね 実質的にないからなー住所らしい住所
F: LMとSSを付けたノートカードを渡したりね
F: わし、いつもここに溜まってますとか。
A: 住所いいなー
L: ボクは、ウォーカーオリエンテーション付で
J: 今はSIM名と座標だけですからね
投稿者:Asaeda Meltingdots
この記事にコメントする
名前(ニックネーム可)とメールアドレスは必ず入力してください.
メールアドレスは管理者にのみ通知されます.
投稿に時間がかかる場合がございますが、投稿ボタンは2回押さないでください.