LlGetStaticPath/ja

From Second Life Wiki
< LlGetStaticPath
Revision as of 11:03, 22 November 2023 by Misaki Vanilla (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

要約

関数: list llGetStaticPath( vector start, vector end, float radius, list params );

startからendまでの位置ベクトル間のパスファインディングウェイポイントを示すリストで、指定されたradiusのキャラクターのものです。この関数が返すウェイポイントは、"static"なナビメッシュのものであり、"movable obstacle"または"movable phantom"に設定されたオブジェクトは無視されます。

この関数は、アタッチメントやその他のキャラクター以外のオブジェクトからも使用できます。また、動的なパスファインディングが無効にされていても、どんなリージョンでも使用できます。を list で返します。

• vector start 開始位置
• vector end 終了位置
• float radius パスを作成するキャラクターの半径(0.125mから5.0mの間)
• list params パラメータとしてCHARACTER_TYPEのみを取ります。オプションはllCreateCharacterで使用されるものと同一で、デフォルト値はCHARACTER_TYPE_NONEです。

リストの最後の要素には、パスクエリの結果を示すステータスコードが常に含まれています。

  • llGetStaticPath()がパスを見つけた場合、ウェイポイントベクトルを返し、成功のためにステータスコード0を返します。
  • llGetStaticPath()が何らかの理由でパスを見つけられない場合、エラーコードだけを返し、エラーの種類を示します。エラーコードはpath_updateの定数に対応しています(たとえば、startベクトルがナビメッシュの近くにない場合はPU_FAILURE_INVALID_STARTが返されます)。

Return constants

定数 説明
PU_SLOWDOWN_DISTANCE_REACHED 0x00 キャラクターが現在のゴールに近いです。
PU_GOAL_REACHED 0x01 キャラクターがゴールに到達し、停止するか新しいゴールを選択します(放浪の場合)。
PU_FAILURE_INVALID_START 0x02 キャラクターは現在の位置からナビゲーションできません - たとえば、キャラクターがナビメッシュの外にいるか、それより高い位置にいます。
PU_FAILURE_INVALID_GOAL 0x03 ゴールがナビメッシュ上になく、到達できません。
PU_FAILURE_UNREACHABLE 0x04 何らかの理由でゴールに到達できなくなりました - たとえば、障害物が経路をブロックしています。
PU_FAILURE_TARGET_GONE 0x05 対象(llPursueまたはllEvadeの場合)をもはや追跡できません - たとえば、それがリージョンを出たか、アバターがリージョンの外に約30m以上いる場合。
PU_FAILURE_NO_VALID_DESTINATION 0x06 キャラクターが行くのに適切な場所がありません - たとえば、巡回していてすべての巡回ポイントが到達不能になった場合。
PU_EVADE_HIDDEN 0x07 llEvadeキャラクターが追跡者から隠れたと思ったときにトリガーされます。
PU_EVADE_SPOTTED 0x08 llEvadeキャラクターが隠れている状態から走り始めるときにトリガーされます。
PU_FAILURE_NO_NAVMESH 0x09 このリージョンにはナビメッシュがないため、キャラクターに報告される致命的なエラーです。これは通常、サーバの障害を示しており、ユーザーはこのメッセージを受け取った時間とリージョンを含めてバグレポートを提出する必要があります。
PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED 0x0A キャラクターが動的なパスファインディングが無効になっているリージョンに入るときにトリガーされます。動的なパスファインディングはエステートマネージャーがリージョンデバッグコンソールの 'dynamic_pathfinding' オプションを介してトグルできます。
PU_FAILURE_PARCEL_UNREACHABLE 0x0B キャラクターがパーセルに入ることができなかったときにトリガーされます。たとえば、パーセルが既に満員であるか、ナビメッシュがベイクされた後にオブジェクトエントリが無効になっている場合など。
PU_FAILURE_OTHER 0xF4240 その他の失敗。

Character type options

オプション デフォルト Range / Values 説明
CHARACTER_DESIRED_SPEED 1 6 [0.2, 40.0] 追跡速度(メートル毎秒)
CHARACTER_RADIUS 2 [0.125, 5.0] 衝突カプセルの半径を設定します。
CHARACTER_LENGTH 3 (0.0, 10.0] 衝突カプセルの長さを設定します。

値が半径の2倍に0.1mを加えたものより小さい場合、それは半径の2倍に0.1mに設定されます。

CHARACTER_ORIENTATION 4 VERTICAL VERTICAL, HORIZONTAL キャラクターの向きを設定します。
TRAVERSAL_TYPE 7 TRAVERSAL_TYPE_SLOW TRAVERSAL_TYPE_FAST, TRAVERSAL_TYPE_SLOW, TRAVERSAL_TYPE_NONE 100%歩行可能でない地形でのキャラクターの移動速度を制御します。速く移動する(例:道路を横断する猫)か遅く移動する(例:沼地を走る車)かを指定します。

_FASTまたは_SLOWを使用するには、CHARACTER_TYPEを指定する必要があります。

CHARACTER_TYPE 6 CHARACTER_TYPE_NONE CHARACTER_TYPE_A, CHARACTER_TYPE_B, CHARACTER_TYPE_C, CHARACTER_TYPE_D, CHARACTER_TYPE_NONE このキャラクターで使用される歩行可能係数を指定します。
CHARACTER_AVOIDANCE_MODE 5 AVOID_CHARACTERS | AVOID_DYNAMIC_OBSTACLES 組み合わせ可能なフラグ: AVOID_CHARACTERS, AVOID_DYNAMIC_OBSTACLES, AVOID_NONE キャラクターが他のキャラクターを避けないように、動的な障害物(比較的速い移動オブジェクトおよびアバター)を避けないように、またはその両方を指定できます。これは肯定的な意味でフレーム化されています([CHARACTER_AVOIDANCE_MODE, AVOID_CHARACTERS]は他のキャラクターを避けるがエージェントや動く車両を避けないキャラクターを作成します)。このパラメータをAVOID_NONEに設定すると、キャラクターはいずれのカテゴリも避けません。
CHARACTER_MAX_ACCEL 8 20 [0.5, 40.0] キャラクターの最大加速度。
CHARACTER_MAX_DECEL 9 30 [0.5, 60.0] キャラクターの最大減速度。
CHARACTER_DESIRED_TURN_SPEED 12 6 [0.02, 40.0] キャラクターの旋回時の最大速度--注意:これは緩く制約されています(つまり、特定の条件下でキャラクターはより高い速度で旋回する可能性があります)
CHARACTER_MAX_TURN_RADIUS 10 1.25 [0.1, 10.0] CHARACTER_DESIRED_TURN_SPEEDで移動する際のキャラクターの旋回半径
CHARACTER_MAX_SPEED 13 20 [1, 40.0] キャラクターの最大速度。動的な障害物を回避するときやTRAVERSAL_TYPE_FASTモードで低い歩行可能なオブジェクトを通過するときの速度に影響します。
CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES 14 TRUE TRUE or FALSE TRUEは既存の動作に一致します。FALSEに設定すると、パスファインディングのパフォーマンスが低い場合にキャラクターは失われた時間を取り戻そうとはしません。これにより、より信頼性のある移動が提供されるかもしれません(ただし、よりスタッタリーに見えるかもしれません)。
CHARACTER_STAY_WITHIN_PARCEL 15 Depends* TRUE or FALSE FALSEは従来の動作に一致します。TRUEに設定すると、パーセルの境界を片側の障害物として扱います(再入ることはできますが、自分自身では出られません)。

サンプル

// llGetStaticPath() test script
// Reports the static path from the object's current position to the object owner's position

// Radius of character to test for
float character_radius = 1.0;

// All defined path_update codes; note that llGetStaticPath() can only return a few of these.
list path_update_codes = [
    "PU_SLOWDOWN_DISTANCE_REACHED ",
    "PU_GOAL_REACHED",
    "PU_FAILURE_INVALID_START",
    "PU_FAILURE_INVALID_GOAL",
    "PU_FAILURE_UNREACHABLE",
    "PU_FAILURE_TARGET_GONE",
    "PU_FAILURE_NO_VALID_DESTINATION",
    "PU_EVADE_HIDDEN",
    "PU_EVADE_SPOTTED",
    "PU_FAILURE_NO_NAVMESH",
    "PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED",
    "PU_FAILURE_PARCEL_UNREACHABLE",
    "PU_FAILURE_OTHER"
];

default
{
    touch_start(integer detected)
    {
        vector agent_pos = llList2Vector(llGetObjectDetails(llGetOwner(), [OBJECT_POS]), 0);
        vector end_pos = llList2Vector(llGetClosestNavPoint(agent_pos, [GCNP_STATIC, TRUE]), 0);
        vector start_pos = llList2Vector(llGetClosestNavPoint(llGetPos(), [GCNP_STATIC, TRUE]), 0);
        if(end_pos == ZERO_VECTOR)
        {
            llOwnerSay("Error: end position undefined - the object owner is either offline or far away from the nav mesh."
                + "\nagent pos is " + (string)agent_pos);
        }
        else if(start_pos == ZERO_VECTOR)
        {
            llOwnerSay("Error: start position undefined - this object is far away from the nav mesh."
                + "\nobject pos is " + (string)llGetPos());
        }
        else
        {
            llOwnerSay("Finding path from " + (string)start_pos 
                + " to " + (string)end_pos 
                + " for a character of radius " + (string)character_radius);
            list result = llGetStaticPath(start_pos, end_pos, character_radius, []);
            integer result_code = llList2Integer(result, -1);
            //llOwnerSay("Raw llGetStaticPath() result: " + llList2CSV(result));
            
            // the last element in the list is just the return code;
            // the preceding elements should be waypoint vectors
            if(result_code == 0)
            {
                llOwnerSay("llGetStaticPath found a path: " + llList2CSV(llList2List(result, 0, -2)));
            } 
            else
            {
                llOwnerSay("llGetStaticPath failed to find a path, with code " + (string)result_code
                    + " (" + llList2String(path_update_codes, result_code) + ")");
            }
        }
    }
}

関連項目

イベント

関数

特記事項

経緯

Date of Release 31/07/2012

Search JIRA for related Issues

脚注

  1. ^ 記事中の範囲は、 実数空間 に記載されているものです。

Signature

function list llGetStaticPath( vector start, vector end, float radius, list params );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。