LlGetStaticPath/ja
Jump to navigation
Jump to search
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: 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) + ")");
}
}
}
}
関連項目
特記事項
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。