Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2008年10月2日木曜日

コントロール用HUDのスクリプト

今回はオブジェクトにデータを送ってコントロールする簡単なHUDのスクリプトです^^

ダイアログからの送信と同じで、HUDがチャットのチャンネルでデータを送信するような感じになります。なのでllSay使ったら20m以内で送信可能ってことになりますね。
HUDからは色のベクターデータを送るように書いてみましたw

// 送信用HUD
integer ch=10020550;  // 送信用チャンネル
integer color=0;  // 色リストのポインタ用
integer len;
list color_list=[<1,1,1>,<1,0,0>,<0,1,0>,<0,0,1>];  // 色のリスト

default
{
    state_entry()
    {
        len=llGetListLength(color_list);  // 色の数
    }

    touch_start(integer total_number)
    {
        color++;  // ポインタ加算
        if (color >= len) color=0;  // 色数を超えたらポインタを0にする
        string str=llList2String(color_list,color);  // 色リストのデータを文字データに変換
        llSay(ch,str);  // データ送信
    }
}


色リストのデータはベクター値ですが、チャットで送信するので文字列データに変換してます。
タッチの度に色リストのデータを順番にひとつ送るようにしました。


そして、データを受信するためのオブジェクトに使うスクリプトです。
// 受信用オブジェクト
integer ch=10020550;  // 受信するチャンネル(送信と同じチャンネル)

default
{
    state_entry()
    {
        llListen(ch,"",NULL_KEY,"");  // 受信チャンネルでリッスン開始
    }

    listen(integer channel, string name, key id, string msg)
    {
        if (llGetOwner() == llGetOwnerKey(id))
        {  // オーナーと送信HUDのオーナーが一致したら
            if (llGetSubString(msg,0,0) == "<")
            {  // データの最初が < だったら
                vector v=(vector)msg; // データをベクター値に変換
                llSetColor(v,ALL_SIDES);  // 色設定
            }
        }
    }
}

listenイベントのキーidにはチャットしたHUDのUUIDが入りますので、それからllGetOwnerKeyでHUDのオーナーのキーを調べて、受信オブジェクトのオーナーと同じだったら受信したデータを処理するようにします。
例えばワイヤレスリモコンとかみたいな、近くのものにデータを送るときは同じような要領になりますね^^

3 件のコメント:

  1. こんばんは。いつもこちらでスクリプト参考にさせていただいてます。
    質問なのですが、このHUDスクリプトの機能をカラーチェンジではなく、テクスチャーチェンジに変えて使ってみたいのですが、どう書き換えればいいのかがわかりません;
    llSetColorやlistを書き換えただけじゃダメなのはわかってるんですけど、他のとこをどうすればいいのかがわかんないです。
    よろしければ教えてください^^;

    返信削除
  2. こんばんは。ご利用ありがとうございます。
    テクスチャの場合はリストにテクスチャ名を記入して、データ送信のところは
    llSay(ch,"texture "+str);
    そして受信オブジェクトは
    if (llGetSubString(msg,0,7) == "texture ") {
    llSetTexture(llGetSubString(msg,8,-1),ALL_SIDES);
    }
    のようにしたらOKですかね?
    この方法ではテクスチャは受信オブジェクトのコンテンツに入れておきます。
    あとコンテンツにテクスチャ入れたくないときはUUIDをスクリプトに記述する方法などもあります。
    わかりにくかったらIMでご相談くださいますか。簡単なサンプルでよかったらお作りできますので^^

    返信削除
  3. ありがとうございます!ばっちり動作しました!
    テクスチャーチェンジでまだわからないことがあるので、IMでご相談させていただきます^^;
    宜しくお願いします。

    返信削除