この記事はセカンドライフ技術系アドベントカレンダー2019向けの記事です。
セカンドライフ技術系 Advent Calendar 2019 - Adventar
アバターでなくオブジェクトをアニメーションさせるAnimeshという機能があるんですが、まとまった日本語情報がなかったので今回紹介しようとおもいます。
Animeshとは
以前から骨組みが入ったメッシュであるリグドメッシュをアバターとして使うことができたんですが、それをオブジェクトとして配置してアニメーションさせる機能がAnimeshです。
今まではオブジェクトはスカルプアニメくらいしかなかったのですが、本格的なアニメーションをつけることができるようになったので、NPC的な使い方をしたり応用次第で色々な演出ができます。
Animeshの関数
Animesh関連の関数は3つしかありません。
llStartObjectAnimation
引数で渡された名前のアニメーションをインベントリから探して再生します。
llStopObjectAnimation
引数で渡された名前のアニメーションを停止します。
llGetObjectAnimationNames
現在再生されているすべてのアニメーションをリストで返します。
たとえばこれらを組み合わせて、すべてのアニメーションを停止する関数とかつくれます。
stopAllAnimation() { list animList = llGetObjectAnimationNames(); integer length = llGetListLength(animList); integer i = 0; while (i < length) { string anim = llList2String(animList, i); llStopObjectAnimation(anim); i++; } }
試してみるには
昔作ったリグドメッシュで試してみたんですが、なぜかうまくいきませんでした。セカンドライフにはAnimeshを試すためのサンドボックスが用意されているので、とりあえずそこに行ってみるとAnimesh対応のリグドメッシュが配布されていました。
Second Life Maps | Animesh1
Rezすると勝手に動き出しますがタッチすると停止します。停止させてからオブジェクトの中身を削除すればお試し用のまっさらなリグドメッシュをゲットできます。
スクリプトサンプル
とりあえず、簡単なスクリプトを書いてみました。
integer isPlaying = FALSE; default { state_entry() { llStopObjectAnimation("walk"); } touch_start(integer total_number) { if(isPlaying) { llStopObjectAnimation("walk"); isPlaying = FALSE; } else { llStartObjectAnimation("walk"); isPlaying = TRUE; } } }
はっきりいって、すごく簡単ですね。リグドメッシュさえあれば、誰でもアニメーションするオブジェクトをつくれます。人がいなくて寂しいシムにも動きをだせるんじゃないでしょうか( ̄∇  ̄ )