Site search

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

2008年10月29日水曜日

飛ぶと羽ばたくウイングのスクリプト

今回はアバターが飛行中のとき羽ばたくウイングのスクリプトです^^

羽のプリムは開き戸とかのドアと同じでパスカットして中心から半分だけになるようにします。なので、羽のテクスチャは片側ずつじゃなくて、左右くっついたものを1枚作ったらいいですね^^
編集でパスカットのBを0.375、Eを0.875にして、X方向のサイズを0.01くらいに薄くしてください。それで面番号1と3が羽の表面になるので、そこに作った羽のテクスチャを貼り付けて、その他の薄い面には透明のテクスチャを貼ります。
これを右用と左用で2枚作ります。そして、親プリムのサイズ X,Y,Z を 0.1,0.1,0.1 ぐらいで作って、右側の羽の角度X,Y,Zは 90,0,75、左側の羽は角度 90,0,285にして親プリムにリンクさせます。位置は親プリムより少し上になるようにテキトーに調整してくださいね。




アバターが飛んでるときは羽の角度が15~75度で羽ばたいて、飛んでないときは角度が10度で固定になるようにしました。チョウチョが止まって羽をたたんだときみたいな感じですかね^^
// 飛んだとき羽ばたくウイング(親プリム用)
float angle;

default
{
    attach(key on)
    {  // 装着されたときは1秒ごとにタイマー
        if (on) llSetTimerEvent(1.0);
        else llSetTimerEvent(0);
    }

    timer()
    {
        if (llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
        { // 飛んでるとき
            if (angle < 45) angle=75;  // 角度が45度までだったら75度に設定
            else angle=15;  // そうじゃないときは15度に設定
            llMessageLinked(LINK_ALL_CHILDREN, 0, (string)angle, "");  // 子プリムに角度を送信
        }
        else {  // 飛んでないとき
            if (angle != 10) {  // 角度が10度じゃなかったら
                angle=10;  // 10度に設定
                llMessageLinked(LINK_ALL_CHILDREN, 0, (string)angle, "");  // 子プリムに角度を送信
            }
        }
    }
}

// 飛んだとき羽ばたくウイング(右側の羽)
default
{
    link_message(integer sender_num, integer num, string msg, key id)
    {  // リンクメッセージ受信したら角度を設定
        llSetLocalRot(llEuler2Rot(<90,0,(float)msg>*DEG_TO_RAD));
    }
}

// 飛んだとき羽ばたくウイング(左側の羽)
default
{
    link_message(integer sender_num, integer num, string msg, key id)
    {  // リンクメッセージ受信したら角度を設定(こっちの角度はマイナスに)
        llSetLocalRot(llEuler2Rot(<90,0,-(float)msg>*DEG_TO_RAD));
    }
}

2 件のコメント:

  1. プリムじゃなくてメッシュではできないのですか?

    返信削除
    返信
    1. コメントありがとうございます。
      メッシュの扱いは詳しくないので正確にお答えできませんが、たぶんメッシュの中心を端(羽の付け根)にすることはできないと思いますので、このスクリプトは全然使えないんじゃないでしょうかね。

      削除