Site search

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

2008年9月1日月曜日

どっから見ても正面に見えるスクリプト

みんなで作ろう。教えて!セカンドライフ!どこから見ても正面になるスクリプトっていうのが載ってたんですよ。
それで同じようなのがもうちょっと簡単にできそうだったので書いてみました。パーティクルでどっちから見てもテクスチャが正面から見えます^^
これはやっぱり広告、看板なんかにいいんでしょうね。

9月2日14時頃追記: みんなで作ろう。教えて!セカンドライフ!に投稿されてた記事が消えてました。どーなってるんでしょう?


オブジェクトのコンテンツ内にテクスチャを入れると、オブジェクトは透明になってパーティクルでテクスチャを表示します。
オブジェクトの大きさ(XとY)を変えるとテクスチャもその大きさになります。でもパーティクルの制限で0.04~4mの範囲になりますがw
// どっちから見ても正面になるテクスチャ
init()
{
    // コンテンツ内のテクスチャ取得
    string texture=llGetInventoryName(INVENTORY_TEXTURE,0);
    // テクスチャがないときはオブジェクトを不透明に
    if (llGetInventoryType(texture) == INVENTORY_NONE) {
        llSetAlpha(1.0,ALL_SIDES);
    }
    else {  // そうじゃないときは透明にする
        llSetAlpha(0,ALL_SIDES);
    }
    vector scale=llGetScale();  // オブジェクトの大きさ取得
    llParticleSystem([
        PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK,
        PSYS_SRC_BURST_RATE, 0.0,
        PSYS_SRC_BURST_SPEED_MAX, 0.0,
        PSYS_SRC_MAX_AGE, 0.0,
        PSYS_PART_MAX_AGE, 0.5,
        PSYS_PART_START_SCALE, <scale.x,scale.y,0>,  // サイズ設定
        PSYS_SRC_TEXTURE, texture]);  // テクスチャ設定
}

default
{
    state_entry()
    {  // 最初はinit実行
        init();
    }

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY) {
            init();  // コンテンツ内が変化したらinit
        }
        else if (change & CHANGED_SCALE) {
            init();  // 大きさが変わったらinit
        }
    }
}

動作は問題ないと思いますが、パーティクルは詳しくないので変な値にしてるとこあるかもですwww
9月1日21時40分頃追記: テクスチャとサイズの変数がグローバル変数になってたんですがムダなので修正しました^^;

0 件のコメント:

コメントを投稿