LlSensorRepeat/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: llSensorRepeat( string name, key id, integer type, float range, float arc, float rate );

nameidtype を、 range メートル以内の前方ベクトル arc ラジアンでスキャンを 1 回行い、それを rate 秒ごとに繰り返します。 rate 秒経過した後に、最初のスキャンが行われます。

• string name オブジェクトまたはアバターの名前
• key id アバター または オブジェクトUUID
• integer type マスク値 (AGENTACTIVEPASSIVESCRIPTED )
• float range 0.0 ~ 96.0 m
• float arc プリムのローカル X 軸と検出対象とするオブジェクトの間の最大角度。 0.0 から PI の範囲
• float rate sensor/no_sensor がキューに入る頻度

nameidtype が空か 0 の場合、無視されます。
id がキーとして正しくないか NULL_KEY の場合は、空として扱われます。

参照: llSensor arc の素晴らしい説明があります。

type マスクフラグ 説明 (llDetectedType()) 説明 (llSensor() と llSensorRepeat() のマスク)
AGENT 0x1 エージェント 廃止: AGENT_BY_LEGACY_NAME を使ってください。
AGENT_BY_LEGACY_NAME 0x1 エージェント Legacy Name(レガシー名)でエージェントを検索します。
AGENT_BY_USERNAME 0x10 エージェント Username(ユーザ名)でエージェントを検索します。
ACTIVE 0x2 物理タスク(物理オブジェクトとエージェント) 移動している物理オブジェクト、または動作中のスクリプトが入っているオブジェクトを検索します。つまり、現在 SecondLife サーバのリソースを消費しているものを検索します。
PASSIVE 0x4 非物理オブジェクト 移動していない物理オブジェクト、または動作中でないスクリプトが入っている非物理オブジェクト、またはスクリプトの入っていないオブジェクトを検索します。つまり、現在 SecondLife サーバのリソースを消費していないものを検索します。
SCRIPTED 0x8 動作中のスクリプトが入っているオブジェクト 動作中のスクリプトが入っているオブジェクトを検索します。つまり、現在 SIM に何かしているものを検索します。
llDetectedType() スクリプトあり スクリプトなし
物理 10 (ACTIVE|SCRIPTED) 2 (ACTIVE)
非物理 12 (PASSIVE|SCRIPTED) 4 (PASSIVE)
Float 定数
PI_BY_TWO 半球スキャン
PI 球形スキャン

警告

  • スクリプトに sensor イベントがないと、 no_sensor が発生しません。 ~ SVC-2409
    • 空の sensor が条件を満たしているのに、 no_sensor が発生します。
  • センサーイベントを繰り返すと、 時間拡張 (ラグ) に悪影響を与えます。
  • アタッチメントの中のセンサーはアバターの向いている方向を前方ベクトルとして使用します。マウスルックでは、アバターが見ている方向、マウスルックでない場合は、アバターが向いている方向ということになります。アバターの頭が向いている方向、アバターがアニメーションで向いている方向は入りません。アバターが前に歩く時に移動する方向となります。この場合、オブジェクトがどこに装着されていても関係ありません。
  • 直近の sensor イベントのみがキューに入ります。以前のセンサーイベントは置きかえられます。
  • SIM の境界線近くで使用すると、llSensorRepeat はたまに数サイクルごとに指定した範囲以外のものを検出することがあります。 timer の中に置いた llSensor はそんなことはありません。

サンプル

// Written by Steamy Latte.
// 30 秒ごとに 10 メートル以内の訪問者をスキャンします。
// 新しい訪問者が範囲内に入ったら、オブジェクトのオーナーに通知します。


string AllAgents;
string OwnerName;

default
{
    state_entry()
    {
        // arc=PI は球形です。PI/2, PI/4 などで、オブジェクトの向いている方向にもっと範囲を狭めてもいいでしょう。
        // ラグを避ける為に、これはあまり頻繁に繰り返し実行しないようにしましょう。
        llSensorRepeat("", "", AGENT, 10.0, PI, 30.0);
    }
    sensor(integer num_detected)
    {
        string thisAgent = "";
        integer agentNum;
        for (agentNum=0; agentNum<num_detected; agentNum++)
        {
            key thisKey = llDetectedKey(agentNum);
            string thisAgent = llDetectedName(agentNum);
            if (thisKey == llGetOwner())
            {
                if (AllAgents != "")
                {
                    llOwnerSay("We've had the following visitors:" + AllAgents);
                    AllAgents = "";
                }
            }
            else if (llSubStringIndex(AllAgents+"\n", "\n"+thisAgent+"\n") < 0)
            {
                AllAgents = AllAgents + "\n" + thisAgent;
            }
        }
    }
}

注意点

Lag ヒント: 多くのケースで、 llSensorRepeat よりも、リソース消費のより少ない llVolumeDetect を使うことを検討しましょう。

関連項目

イベント

•  sensor センサーが何かを探知したときに作動します
•  no_sensor センサーが何も探知しない時に作動します

関数

•  llSensor センサーを 1 回走らせます
•  llSensorRemove llSensorRepeat のタイマーを停止します

記事

•  Object Type

特記事項

All Issues

~ Search JIRA for related Issues
   sensor がないと llSensorRepeatno_sensor を発生させません。
   llSensorRepeat randomly returns unexpected results if arc>PI

Signature

function void llSensorRepeat( string name, key id, integer type, float range, float arc, float rate );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。