BlackSheep-LSL@Wiki llRezObject

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

llRezObject

llRezObject(string inventory, vector pos, vector vel, rotation rot, integer param)

引数inventoryで指定した名前のオブジェクトをrezする。
オブジェクトはコンテンツ内になければならない。
コンテンツ内に無いオブジェクトをrezしようとすると、
Couldn't find object XXXX
というエラーが発生する。
また、rez不可能なアイテム(テクスチャとかサウンドなど)を指定すると、
Unable to create requested object. Object is missing from database.
と叱られるんだそうだ(未確認)。

rezする位置は引数posで指定するが、posはワールド座標なので注意すること。
呼び出し元オブジェクトからの相対距離ではない。
また、呼び出し元から10m以上離れた位置にはrezすることができない。
10m以上離れた位置にrezしようとすると、関数は何の警告もなく失敗する。
引数posが10m以上離れているかどうかを判定するには、
if (llVecDist(pos, llGetPos()) < 10.0){
  // 10m以内
}
このようにすれば良い。
なお、ここで指定する位置はrezするオブジェクトの重心座標となる。
オブジェクトのルート座標を基準にrezしたい場合は、llRezAtRoot関数を使う。

引数velはrezするオブジェクトの速度である。
rezするオブジェクトが物理オブジェクトの場合のみ有効。
物理オブジェクトでなければ無視される。
速度の最大値は250(llVecMag(vel) = 250)だそうだ。

引数rotはrezするオブジェクトの回転である。

引数paramはrezするオブジェクトに引き渡すパラメータとなる。
オブジェクトがrezされたとき、rezされたオブジェクトのスクリプトではon_rez?イベントが発生するが、on_rezに渡される引数がparamである。
また、この値はrezされたオブジェクトのスクリプトにてllGetStartParameter関数を使って取得することもできる。

この関数はrezするオブジェクトのmass(重さ)と引数vel(速度)に応じて処理時間が変わるらしい。
JeffreyGomezの実験(公式フォーラム)によると、ディレイ時間は以下の式で求められる。
delay = llGetMass() * llVecMag(vel) / 10

rezするオブジェクトはコピー可にしておくべきである。
さもなければ一度rezした後、コンテンツ内から消えてしまうので、二度とrezできない。
特に「次のオーナーがコピー可」にチェックを忘れた場合、クリエイターがテストしている時は問題なく動作していても、誰かに渡した時点で1発限りのrezになってしまう。
また、コピー不可なオブジェクトはアタッチメントからrezすることができない。

また、大量にrezするようなオブジェクトの場合、「一時オブジェクト」にしておくべきである。
うっかりこれを忘れると、最悪の場合スパム扱いされてしまう。

オブジェクトのrezを行うと、rezを行った側のスクリプトではobject_rez?イベントが起こる。
このイベントではrezしたオブジェクトのUUIDを取得可能である。

rezのサンプルは初級スクリプト解説記事を参照。

名前:
コメント: