Site search

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

2008年8月3日日曜日

座っても脚が出ないスカートのスクリプト

ものづくり始めたころは服なんかも少し作ってみたんですが、失敗の連続でアップロード費用かかりすぎて挫けた千尋ですwww それで服はもう今のところ全く作ってないので、ときどき買っちゃたりとかすることあるんですが、着替えちゃうと何かいつもの自分じゃない気がして落ち着かないんですよw なので結局いつもの同じ服に戻ってます^^;

でも、この前いろんなモール見てまわってたときにワンダーチェアでゲットした服着てみたら、かわいすぎず、ハデすぎず、まあまあ自分的に合ってそうな感じだったんで、しばらくはこれ着てようかなって気になってきました^^ それで、今までずっと地味なタイトスカートだったんですが、この服のはプリムスカートなんですね。座ると足が。。。^^;;

そゆことで今回はフレキシブルなプリムスカートで座っても脚が出ないようにするスクリプトを書いてみました。
タイマーでアバターの状態を定期的に調べて、座ってたらフレキシブルの特徴の重力とX軸、Y軸のフォース(力?)を足が隠れるように変えます。



使い方は、編集でスカートのプリムに設定してる特徴の数値のとおりに、スクリプトのunsitのリスト変数のところを変えてください(柔軟性は整数にして)。その後にスクリプトを親プリムに入れてください。(そこを変えずにスクリプトを先に入れちゃうとプリムの特徴が書き換えられてしまいますのでw)
親プリムがフレキシじゃないときはllSetLinkPrimitiveParamsのLINK_SETをLINK_ALL_CHILDRENに変えてくださいね^^
あとは座ってみて変だったらスクリプトのgravityとforceの値をテキトーに調整してください。
// 座っても脚の隠れるスカート
// 座ってないときの特徴パラメータリスト [ 柔軟性, 重力, ドラッグ, 風, 緊張, X、Y、Z方向のフォース ]
list unsit=[3, 2.0, 1.0, 1.0, 8.0, <0,0,0>];
list sit;  // 座ったときの特徴パラメータリスト
float gravity=0.5;  // 座ったときの重力(調整してね)
float force=3;  // 座ったときに加えるフォース(調整してね)

default
{
    state_entry()
    {
        unsit=[PRIM_FLEXIBLE,TRUE]+unsit;  // llSetLinkPrimitiveParams用にパラメータを追加
        sit=llListReplaceList(unsit,[gravity],3,3);  // 座ったときの特徴の重力を設定
        llSetTimerEvent(0.5);  // 0.5秒間隔でタイマー
    }

    timer()
    {
        integer i=llGetAgentInfo(llGetOwner());  // アバターの状態
        string str=llGetAnimation(llGetOwner());  // アバターのアニメーション
        if ((i & AGENT_SITTING) || str == "Sitting")
        {  // 座ってるか座るアニメーションだったら
            list l=llGetObjectDetails(llGetOwner(),[OBJECT_ROT]);  // アバターのローテーションを調べる
            vector v=llRot2Euler(llList2Rot(l,0));  // リストのローテーションをベクトルに変換
            float x=llCos(v.z)*force;  // z方向の角度から
            float y=llSin(v.z)*force;  // x,yに加える数値を計算
            sit=llListReplaceList(sit,[<x,y,0>],-1,-1);  // リストの値に入れて
            llSetLinkPrimitiveParams(LINK_SET,sit);  // それをプリムに反映
        }
        else {  // 座ってないとき
            llSetLinkPrimitiveParams(LINK_SET,unsit);  // プリムに座ってない状態を設定
        }
    }
}

フレキシブルプリムってあまり使ったことないので詳しくないんですよw それで今回は簡単に重力だけ調整するようにしたんですが、他の柔軟性、ドラッグ、 緊張なんかも細かく調整できるようにしたほうがいいんでしょうかね?^^;
8月5日11時20分頃追記: アバターの状態の判定のところを間違えてたので修正しました
if (i == AGENT_SITTING || str == "Sitting") → if ((i & AGENT_SITTING) || str == "Sitting")

0 件のコメント:

コメントを投稿