LlRezObject/ja

From Second Life Wiki
Jump to: navigation, search

要約

関数: llRezObject( string inventory, vector pos, vector vel, rotation rot, integer param );

オブジェクト inventory を位置 pos に、速度 vel、回転 rot、開始パラメタ param で出現させる。

• string inventory プリムの インベントリ の中にあるオブジェクト
• vector pos 位置 (リージョン座標 で指定)
• vector vel 速度
• rotation rot 回転
• integer param on_rez イベントの引数であり、 rez されたオブジェクトでの llGetStartParameter の戻り値でもある。

posinventory のルートプリムの位置ではなく、inventory中心 の位置です。
pos にルートプリムの位置を当てはめたい場合は、代わりに llRezAtRoot を使ってください。

警告

  • この関数は 0.1 秒間、スクリプトを停止します。
  • inventory がプリムの中で見つからない場合、またはこれがオブジェクトでない場合、エラーが DEBUG_CHANNEL 上で叫ばれます。
  • 通常の関数の遅延に加え、rez されたオブジェクトの大きさ (mass) と速度 (velocity) に応じてさらに遅延が生じます。
  • pos' が rez しようとしている元のオブジェクトから離れ過ぎていると、エラー表示を出さずに inventory の rez は失敗します。
    • スクリプトでなぜか rez に失敗する場合、 posllGetPos() + <0.0,0.0,1.0> でなく "<0.0,0.0,1.0>" のように指定していないか確認してください。
    • 書かれている制限は 10 m です。しかし、少なくともサーバのバージョンによっては、それよりも制限距離は大きいと実験によって分かっています。 rez 元のオブジェクトのサイズによるとか。詳細は、 Notes を参照してください。
  • スクリプトされたアタッチメントにオブジェクトを rez させようとしているときは、アタッチメントは動くことを意識してください。 llGetPos() を使って、 pos にそれを加え、 rez されるオブジェクトの信頼できる位置を取得する必要があるでしょう。 (装着された) アタッチメント のルートプリムで使用するときは、 llGetPos はアタッチメントの位置を返さず、アバターの Bounding Box の重心を返します。 llGetPos llParticleSystem Caveats にさらに情報があります。
  • オブジェクトのオーナーが inventory についてコピー権限を持っていない場合、、それを rez してしまうと、もうそれはインベントリに残りません。(従ってそれ以上 (同じオブジェクトを) rez しようとしても失敗します。) オーナーがコピー権限を持っているならば、コピーが rez され、オリジナルの inventory がインベントリに残ります。
  • あなたがその土地にログオフ時でも建造可能な権限を持っていないと、エラー表示を出さずに失敗します。
    • すなわち、以下のいずれかを満たす必要があります。
      1. そこがあなた自身の土地である。
      2. その土地を所有するグループにあなたが属し、グループによる建造が土地で許可されており、オブジェクトにグループ設定が済んでいる。
      3. その土地では誰でも建造が許可されている。
      4. その土地を所有するグループへ、オブジェクトを譲渡する。この方法は常にうまくゆくでしょう。
    • あなたがログインしている時に限り、"常に「オブジェクト作成」を許可" というグループ権限が上記の制約に優先します。詳細は特記事項の記事にある SVC-3145 を参照してください。

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   group ROLE permissions only work for scripted rez when owner is online

サンプル

default
{
     touch_start(integer param)
     {
          llRezObject("Object", llGetPos() + <0.0,0.0,1.0>, <0.0,0.0,0.0>, <0.0,0.0,0.0,1.0>, 0);
     }
}
// タッチすると、rez 元のプリムの座標システムでの相対位置、回転、速度で、オブジェクトを rez します。
string object = "Object"; // インベントリの中のオブジェクトの名前
vector relativePosOffset = <2.0, 0.0, 1.0>; // このプリムの「手前」でちょっと「上」
vector relativeVel = <1.0, 0.0, 0.0>; // このプリムの「前」の方向に 1 m/秒で進みます
rotation relativeRot = <0.707107, 0.0, 0.0, 0.707107>; // このプリムに対して X 軸で 90° 回転します
integer startParam = 10;
 
default
{
    touch_start(integer a)
    {
        vector myPos = llGetPos();
        rotation myRot = llGetRot();
 
        vector rezPos = myPos+relativePosOffset*myRot;
        vector rezVel = relativeVel*myRot;
        rotation rezRot = relativeRot*myRot;
 
        llRezObject(object, rezPos, rezVel, rezRot, startParam);
    }
}

注意点

(訳注:2010 年 5 月上旬時点で議論中?のため、落ち着いてから翻訳する。簡単に書くと、住人の実験により、条件 (元オブジェクトの大きさ、グリッドにスナップされているかされていないか) によって、最大距離が違うのではないか、というもの。ソースコードによる裏付けはされていないし、 Jira に載っているものでもない。)

関連項目

定数

•  PRIM_TEMP_ON_REZ

イベント

•  object_rez オブジェクトをインベントリから rez する時に発生する。

関数

•  llRezAtRoot オブジェクトを指定した位置に rez する。
•  llGetStartParameter
•  llGodLikeRezObject

特記事項

All Issues

~ Search JIRA for related Issues
   group ROLE permissions only work for scripted rez when owner is online

Signature

function void llRezObject( string inventory, vector pos, vector vel, rotation rot, integer param );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。