読者です 読者をやめる 読者になる 読者になる

Yes Second Life

セカンドライフに早9年、現役セカンドライファーの考えてること

Pathfindingで、複数箇所を巡回させる

これは、セカンドライフ技術系アドベントカレンダーの記事です。

セカンドライフ技術系 Advent Calendar 2014 - Adventar
今回は、Pathfindingで複数箇所を巡回させてみます。

Secondlife Pathfinding機能 - llPatrolPoints - YouTube
複数箇所を巡回させたいときは、llPatrolPoints関数を使います。

次の例では、"target"という名前のオブジェクトを周りからさがして、複数見つかった場合に、そのポイントを巡回させます。

default {
    
    state_entry()
    {
        // オブジェクトをPathfindingのキャラクターに設定
        llCreateCharacter([]);
    }

    touch_start(integer num)
    {
        // タッチされたら、targetという名前のオブジェクトを探す
        llSensor("target", "", PASSIVE, 25.0, PI);
    }
    
    sensor(integer num)
    {
        // オブジェクトが1つの場合、パトロールできないので処理続行しない
        if(num<=1) return;
        
        integer i;
        list l;
        
        // targetというオブジェクト郡の位置をリストに格納
        for(i=0; i<num; i++)
        {
            l += llDetectedPos(i);
        }
        
        // オブジェクト郡を巡視する
        llPatrolPoints(l, []);
    }

    no_sensor()
    {
        // targetというオブジェクトが見つからなかったら何もしない
        llOwnerSay("No target in range.");
    }
}

巡回ポイントを1つしか指定しないとエラーになるので気をつけてください。llPatrolPoints関数には、リストで1つ引数を指定できます。

オプション 説明 デフォルト値
PATROL_PAUSE_AT_WAYPOINTS 巡回ポイントに到達した時、一瞬止まるようにする FALSE

前回の追跡に続いて、巡回を紹介しましたが、Pathfindingにはまだまだ色んな動作があります。気になったら調べてみると面白いですよ( ̄∇  ̄ )