この記事はセカンドライフ技術系アドベントカレンダー2019向けの記事です。
セカンドライフ技術系 Advent Calendar 2019 - Adventar
前回の基本編でオブジェクトをアニメーションさせれるようになったのですが、あのままではずっとその場で再生するだけです。セカンドライフにはPathfindingというオブジェクトをNPCのように動かす機能があります。今回はそれと組み合わせることで、NPCのように動作するAnimeshを作成してみます。
Pathfindingとは
Pathfindingとは、オブジェクトをNPCのように動作させる仕組みです。オブジェクトに以下のような動作をさせられます。
目的地へ移動 | llNavigateTo |
追跡 | llPursue |
逃走 | llEvade |
離れる | llFleeFrom |
巡回 | llPatrolPoints |
徘徊 | llWanderWithin |
AnimeshとPathfindingを組み合わせる
今回は追跡のPathfindingとAnimeshを組み合わせて、自分についてくるNPCを作ってみます。ずっと歩くアニメーションを再生していると自分が止まったときにも歩き続けて不自然なので、Timerで自分の速度を監視して一定の速度以下になったらアニメーションを停止するようにしてみます。
// 歩きのアニメーション名 string ANIM_NAME = "walk"; default { state_entry() { // このオブジェクトをPathfindingのキャラクターに設定、追跡速度は2.0 llCreateCharacter([CHARACTER_DESIRED_SPEED, 2.0]); // オブジェクトオーナーの追跡を開始 llPursue(llGetOwner(), []); // 0.25秒ごとにタイマーイベント設定 llSetTimerEvent(0.25); } on_rez(integer start_param) { // Rez時にリセット llResetScript(); } timer() { // 一定の速度以下の場合 if(llVecMag(llGetVel()) < 0.1) { // 歩きのアニメーションを停止する llStopObjectAnimation(ANIM_NAME); } // 一定の速度以上の場合 else { // 歩きのアニメーションを実行する llStartObjectAnimation(ANIM_NAME); } } }
アニメーションを実行中にllStartObjectAnimationしたり、停止中にllStopObjectAnimationしてもエラーはでなかったので、チェックはなしでシンプルに実装しました。実際の動作は動画でどうぞ( ̄∇  ̄ )
AnimeshをPathfindingと組み合わせることで、かなり本格的なNPCがつくれます。単についてくるだけじゃなくてウロウロさせたり逃走させたり色々できるので可能性無限大ですね( ̄∇  ̄ )