Difference between revisions of "LlRezObject/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
 
(5 intermediate revisions by 2 users not shown)
Line 4: Line 4:
|func=llRezObject|sort=RezObject
|func=llRezObject|sort=RezObject
|p1_type=string|p1_name=inventory
|p1_type=string|p1_name=inventory
|p2_type=vector|p2_name=pos|p2_desc=位置 ([[Viewer coordinate frames/ja#Region|リージョン座標]]で指定)|p2_hover=positioren (in region coordinates)
|p2_type=vector|p2_name=pos|p2_desc=位置 ([[Viewer coordinate frames/ja#Region|リージョン座標]] で指定)|p2_hover=位置 (リージョン座標で)
|p3_type=vector|p3_name=vel|p3_desc=速度ベクトル (速さ ([[llVecMag/ja|ベクトルの大きさ]]) の最大は 250)
|p3_type=vector|p3_name=vel|p3_desc=速度
|p4_type=rotation|p4_name=rot|p4_desc=回転
|p4_type=rotation|p4_name=rot|p4_desc=回転
|p5_type=integer|p5_name=param|p5_desc=[[on_rez/ja|on_rez]] イベントの引数であり、rez されたオブジェクトでの [[llGetStartParameter/ja|llGetStartParameter]] の戻り値でもある。|p5_hover=on_rez event parameter and value returned by llGetStartParameter in the rezzed object.
|p5_type=integer|p5_name=param|p5_desc={{LSLG/ja|on_rez}} イベントの引数であり、 rez されたオブジェクトでの {{LSLG/ja|llGetStartParameter}} の戻り値でもある。|p5_hover=on_rez イベントの引数であり、 rez されたオブジェクトでの llGetStartParameter の戻り値でもある。
|func_footnote='''pos''' は '''inventory''' のルートプリムの位置ではなく、'''inventory''' の中心の位置です。<br/>'''pos''' にルートプリムの位置を当てはめたい場合は、代わりに [[llRezAtRoot/ja|llRezAtRoot]] を使ってください。
|func_footnote='''pos''' は '''inventory''' のルートプリムの位置ではなく、'''inventory''' の {{LSLG/ja|llGetGeometricCenter|中心}} の位置です。<br/>'''pos''' にルートプリムの位置を当てはめたい場合は、代わりに {{LSLG/ja|llRezAtRoot}} を使ってください。
|func_desc=オブジェクト '''inventory''' を位置 '''pos''' に、速度 '''vel'''、回転 '''rot'''、開始パラメタ '''param''' で出現させる。
|func_desc=オブジェクト '''inventory''' を位置 '''pos''' に、速度 '''vel'''、回転 '''rot'''、開始パラメタ '''param''' で出現させる。
|return_text
|return_text
Line 14: Line 14:
|caveats=
|caveats=
* 通常の関数の遅延に加え、rez されたオブジェクトの大きさ (mass) と速度 (velocity) に応じてさらに遅延が生じます。
* 通常の関数の遅延に加え、rez されたオブジェクトの大きさ (mass) と速度 (velocity) に応じてさらに遅延が生じます。
**<code>rez_delay = mass * llVecMag(velocity) / 10;</code> [http://forums.secondlife.com/showthread.php?t=82659]
**<code>rez_delay = {{LSLG/ja|llGetMass}}() * {{LSLG/ja|llVecMag}}(velocity) / 10;</code> [http://forums.secondlife.com/showthread.php?t=82659]
* '''inventory''' を rez するオブジェクトから '''pos''' までが 10 メートル以上離れている場合、エラー表示を出さずに '''inventory''' の rez は失敗します。何故 rez に失敗するか分からないという場合、'''pos''' の値を、例えば "llGetPos() + <0,0,1>" と書くべきところで "<0,0,1>" としていないか確認してください。
*''pos''' rez しようとしている元のオブジェクトから離れ過ぎていると、エラー表示を出さずに '''inventory''' の rez は失敗します。
* オブジェクトのオーナーが '''inventory''' についてコピー権限を持っていない場合、それを rez してしまうと、もうそれはインベントリに残りません。(従ってそれ以上 rez しようとしても失敗します。) オーナーがコピー権限を持っているならば、コピーが rez され、オリジナルの '''inventory''' がインベントリに残ります。
**スクリプトでなぜか rez に失敗する場合、 '''pos''' に <code>{{LSLG/ja|llGetPos}}() + <0.0,0.0,1.0></code> でなく "<code><0.0,0.0,1.0></code>" のように指定していないか確認してください。
**書かれている制限は 10 m です。しかし、少なくともサーバのバージョンによっては、それよりも制限距離は大きいと実験によって分かっています。 rez 元のオブジェクトのサイズによるとか。詳細は、 [[llRezObject/ja#Notes | Notes]] を参照してください。
* スクリプトされたアタッチメントにオブジェクトを rez させようとしているときは、アタッチメントは動くことを意識してください。 <code>{{LSLG/ja|llGetPos}}()</code> を使って、 '''pos''' にそれを加え、 rez されるオブジェクトの信頼できる位置を取得する必要があるでしょう。 ({{LSLG/ja|attach|装着された}}) {{LSLG|attachment|アタッチメント}} のルートプリムで使用するときは、 <code>{{LSLG/ja|llGetPos}}</code> はアタッチメントの位置を返さず、アバターの Bounding Box の重心を返します。 {{LSLG/ja|llGetPos}} と [[llParticleSystem/ja#Caveats | llParticleSystem Caveats]] にさらに情報があります。
* オブジェクトのオーナーが '''inventory''' についてコピー権限を持っていない場合、、それを rez してしまうと、もうそれはインベントリに残りません。(従ってそれ以上 (同じオブジェクトを) rez しようとしても失敗します。) オーナーがコピー権限を持っているならば、コピーが rez され、オリジナルの '''inventory''' がインベントリに残ります。
* あなたがその土地にログオフ時でも建造可能な権限を持っていないと、エラー表示を出さずに失敗します。
* あなたがその土地にログオフ時でも建造可能な権限を持っていないと、エラー表示を出さずに失敗します。
** すなわち、以下のいずれかを満たす必要があります。
** すなわち、以下のいずれかを満たす必要があります。
Line 23: Line 26:
**# その土地では誰でも建造が許可されている。
**# その土地では誰でも建造が許可されている。
**# その土地を所有するグループへ、オブジェクトを譲渡する。この方法は常にうまくゆくでしょう。
**# その土地を所有するグループへ、オブジェクトを譲渡する。この方法は常にうまくゆくでしょう。
** あなたがログインしている時に限り、"常に「オブジェクト作成」を許可" というグループ権限が上記の制約に優先します。詳細はディープノートの要因の項にある [[#SVC-3145|SVC-3145]] を参照してください。
** あなたがログインしている時に限り、"常に「オブジェクト作成」を許可" というグループ権限が上記の制約に優先します。詳細は特記事項の記事にある [[#SVC-3145|SVC-3145]] を参照してください。
|constants
|constants
|examples=<lsl>default
|examples=<source lang="lsl2">default
{
{
     touch_start(integer param)
     touch_start(integer param)
Line 31: Line 34:
           llRezObject("Object", llGetPos() + <0.0,0.0,1.0>, <0.0,0.0,0.0>, <0.0,0.0,0.0,1.0>, 0);
           llRezObject("Object", llGetPos() + <0.0,0.0,1.0>, <0.0,0.0,0.0>, <0.0,0.0,0.0,1.0>, 0);
     }
     }
}</lsl>
}</source>
<source lang="lsl2">// タッチすると、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);
    }
}</source>
|helpers
|helpers
|also_constants=
{{LSL DefineRow||{{LSLG/ja|PRIM_TEMP_ON_REZ}}|}}
|also_functions=
|also_functions=
{{LSL DefineRow||[[llRezAtRoot/ja|llRezAtRoot]]|オブジェクトを指定した位置に rez する。}}
{{LSL DefineRow||{{LSLG/ja|llRezAtRoot}}|オブジェクトを指定した位置に rez する。}}
{{LSL DefineRow||[[llGetStartParameter/ja|llGetStartParameter]]|}}
{{LSL DefineRow||{{LSLG/ja|llGetStartParameter}}|}}
{{LSL DefineRow||[[llGodLikeRezObject/ja|llGodLikeRezObject]]|}}
{{LSL DefineRow||{{LSLG/ja|llGodLikeRezObject}}|}}
|also_tests
|also_tests
|also_events=
|also_events=
{{LSL DefineRow||[[object_rez/ja|object_rez]]|オブジェクトをインベントリから rez する時に発生する。}}
{{LSL DefineRow||{{LSLG/ja|object_rez}}|オブジェクトをインベントリから rez する時に発生する。}}
|also_articles
|also_articles
|notes
|notes=(訳注:2010 年 5 月上旬時点で議論中?のため、落ち着いてから翻訳する。簡単に書くと、住人の実験により、条件 (元オブジェクトの大きさ、グリッドにスナップされているかされていないか) によって、最大距離が違うのではないか、というもの。ソースコードによる裏付けはされていないし、 Jira に載っているものでもない。)
|permission
|permission
|inventory
|inventory

Latest revision as of 03:51, 25 February 2016

要約

関数: 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 を参照してください。

サンプル

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の関連した項目が参考になるかもしれません。