2011年2月4日金曜日

Rezzer HUDのスクリプト

空中で辺りに足場も何もない場所にオブジェクトをrezしたいときってありますよね? 今回はそんなときにちょっと便利なRezzer HUDのスクリプトです^^

HUDをタッチで自分の前1mくらいの位置にオブジェクトがrezされます。

// Rezzer HUD
vector offset=<1,0,0>;  // Rezする位置(自分の位置を基準にして相対的な値)

default
{
    touch_start(integer total_number)
    {  // タッチされたら
        key id=llDetectedKey(0);  // アバターのキー取得
        if (id == llGetOwner()) {  // オーナーだったら
            string obj=llGetInventoryName(INVENTORY_OBJECT,0);  // コンテンツ内の最初のオブジェクト名
            if (obj) {
                vector pos=llGetPos();  // 現在位置取得
                rotation rot=llList2Rot(llGetObjectDetails(id,[OBJECT_ROT]),0);  // 向き(回転)を取得
                llRezObject(obj,pos+offset*rot,ZERO_VECTOR,ZERO_ROTATION,0);  // オフセット値を加えてrez
            }
            else {  // オブジェクトが入ってなかったら
              llOwnerSay("Error オブジェクトが入ってないです");
            }
        }
    }
}

ローテーションを含めた位置計算が何かあまり理解できてないんですけど(いつも試行錯誤しながらやってますw)、まあそれ以外はめっちゃ簡単ですね^^;

コンテンツ内にrezしたいオブジェクトを入れてご使用ください。土地のチェックとかはしてないので、オブジェクト作成不能な場所ではスクリプトエラーが出ます。

ところでずっと思ってたんですけど、rezって発音は「レズ」でいいんですよね? でも仮名で書いちゃうとSL知らない人が見たら、誤解とかもあるんじゃないかなって気もしますね?www

0 件のコメント:

コメントを投稿