ソラマメブログ

2007年09月20日

風船で遊んでみました^^

Maroaさんから宙に浮かせてプカプカさせたいという問い合わせがあって
いろいろ遊んでみました。

もう、解決したみたいですけど、こんな感じですかね。
風船で遊んでみました^^

腰の位置で上下するようなアニメーションで、浮いている感じを出しています。
風船は、アタッチされているので、アニメーションにあわせて上下します。

んで、ここからそれていくのですが・・・

なんか本物っぽい風船をつくれないかなーーって思って、いろいろやってみました。
そのものをプカプカ浮かせるには、
物理属性にして浮力(Buoyancy)を設定します。

テスト用のスクリプトは以下のとおりです。
(適当な風船のカタチを作って、以下のスクリプトを設定してみてください。)

おくとフワフワ浮ぶ風船スクリプト

//===============================================
// [Balloon.lsl]
// Floating Balloon
// ver 1.0 Sep 20, 2007 by Jinko Spitteler
//===============================================
// Ref http://wiki.secondlife.com/wiki/LlSetBuoyancy

float fBalloonLife = 300.0; //[sec]
init () {
    llSetPrimitiveParams([PRIM_PHYSICS, TRUE]);
    llSetBuoyancy(1.05);
    llSetTimerEvent(fBalloonLife);
}
ending () {
    llOwnerSay("Bang!!");
    llSetTimerEvent(FALSE);
    llDie();
}
default {
    state_entry () {
        init();
    }
    touch_start (integer num_detected) {
        ending();
    }
    timer () {
        ending();
    }
}


地面に置くとふわふわあがってなくなりやすいので、
タッチするか、300秒後に勝手に消滅するようにしてます。

浮力の設定ですが、
llSetPrimitiveParams([PRIM_PHYSICS, TRUE]);
で、物理属性にして、
llSetBuoyancy(1.05);
で浮力をセットしています。
パラメータは、1.0のとき無重力、
1より小さいときは落ちていって(沈む)、
1より大きいと浮びます。

風船で遊んでみました^^

ひものところをフレキシにしたいところなんですが、
物理属性のときは、フレキシをあきらめないといけませんね^^
過去記事

このままでも、結構遊べるのですが、なくなってしまいますので、
おいたらフワフワあとをついてくるように改良してみました。

おくとフワフワついてくる風船
//===============================================
// [Balloon.lsl]
// Floating Balloon Following AV
// ver 1.1 Sep 20, 2007 by Jinko Spitteler
//===============================================
// Ref http://wiki.secondlife.com/wiki/LlSetBuoyancy
// Ref http://kappa.slmame.com/e19525.html
// Ref http://sabro.slmame.com/e28777.html

key keyOwner;
float fSensorRange = 30.0; //[m]
float fSensorInterval = 2.0; //[sec]
float fTargetRange = 0.1; //[m]
vector vecTargetOffset = <0, 0, 2>;
float fBalloonLife = 300.0; //[sec]

init () {
    llSetPrimitiveParams([PRIM_PHYSICS, FALSE]);
    llSetBuoyancy(1.0);
    keyOwner = llGetOwner();
    llSetTimerEvent(fBalloonLife);
    llSensorRepeat("", keyOwner, AGENT, fSensorRange, PI * 2, fSensorInterval);
}

move(vector vecTargetPos) {
    vector vecCurrentPos = llGetPos();
    llSetPrimitiveParams([PRIM_PHYSICS, TRUE]);
    llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE);
    llMoveToTarget(vecTargetPos, 1.0);
}

ending () {
    llOwnerSay("Ban!!");
    llSetTimerEvent(FALSE);
    llDie();
}

//-------------------------------------------------------------
// Default State
//-------------------------------------------------------------
default {
    state_entry () {
        init();
    }
    sensor (integer num_detected) {
        move(llDetectedPos(0) + vecTargetOffset);
    }
    touch_start (integer num_detected) {
        ending();
    }
    timer () {
        ending();
    }
}


かっぱさんのところの、ペットの記事を大いに参考にさせていただきました。オリジナルは、ハチのカタチのペットがついてきて頭の上でグルグルまわってかわいいんです。
また、姿勢制御は、sabroさんの物理オブジェクトの回転を防ぐという記事を参考にさせていただきました。設定結果の実験動画付です。
どうもありがとうございました>かっぱさん、sabroさん

風船で遊んでみました^^

本当は、風船を手にもって、プカプカできるといいのに~と思ってます。

これは、できませんでした^^;

プカプカといいながら、止まっているときは実はプカプカしていません。
アタッチメントをフワフワ動かすには、どうしたら・・・・

Harayokiさんの記事アタッチメントをフワフワ動かすの続きを楽しみにしておきたいと思います♪
(↑他力本願ですね^^)

(追記)
Harayokiさんの記事をあたらめて読むと、そっか、llSetPosをtimerイベントで動かせばいいんだってわかりました。ありがとうございました>Harayokiさん



同じカテゴリー(Tips)の記事画像
プリムスカートの簡単な作り方のヒミツ。初めてわかりました^^
球面の内側にテクスチャを貼るときの覚書です^^
LSL:日本語文字列をバイト数で長さ制限
スナップショットをレンズぼかしで加工してみました^^
LSLのカラーに変換するツールを作ってみました^^
ブラウザからインワールドの検索を使ってます^^
同じカテゴリー(Tips)の記事
 プリムスカートの簡単な作り方のヒミツ。初めてわかりました^^ (2009-07-11 14:57)
 球面の内側にテクスチャを貼るときの覚書です^^ (2009-06-27 07:28)
 LSL:日本語文字列をバイト数で長さ制限 (2009-04-29 12:06)
 スナップショットをレンズぼかしで加工してみました^^ (2008-10-06 04:14)
 LSLのカラーに変換するツールを作ってみました^^ (2008-10-02 21:15)
 ブラウザからインワールドの検索を使ってます^^ (2008-09-02 17:39)

Posted by jinko at 20:33│Comments(8)Tips
この記事へのコメント
お役に立って何よりです。
がんばって記事作ったかいがありました^^

jinkoさんのブログは濃い記事多いですね。
DAZ Studioをこれから使おうと思っていたので、
ポーズ書き出しの記事は参考になりました^^
Posted by sabro at 2007年09月20日 21:48
 ぉ、かわいい風船!

 ぜひ作ってみます^^

 これを手がかりにもの置くときに浮いたままでてきてくれるかも試してみますね♪

 とっても嬉しいです^^
Posted by Maroa at 2007年09月21日 00:18
sabro さん、

お越しいただいた上にコメントまでありがとうございました。
sabro さんこそ、いろいろ実験されてて、すごく参考になりますよー

向かってくるパーティクルなんかもいつか使えればなーと思ってます^^
今後ともよろしくお願いいたします。
Posted by jinkojinko at 2007年09月21日 03:48
Maroa さん、

風船、、、わりと奥が深いのですが、遊ぶと楽しいですね。
是非、作ってみてください。
ハートとか、クマさんとか・・・

ところで、
ものを置いた瞬間は、たぶん、床とかにくっついた感じになっているように
思います。

浮力を1より大きくすると、浮かび上がってきますが、
setposを使って、位置を変更するのが良いかと思いますよー

こんな感じ・・・

default {
on_rez (integer param) {
if (!llGetAttached())
llSetPos(llGetPos() + <0.0, 0.0,0.5>);
}
}

このスクリプトを適当な箱に入れると、
床に置いたときに50cm上にあがります。
試してみてくださいねー
Posted by jinkojinko at 2007年09月21日 04:10
 ありがとうーJinkoさん^^

 さっそく仕事そっちのけでしてみますー(ぇ?w

 
Posted by Maroa at 2007年09月21日 10:43
ははは・・・

お仕事は・・・・

ちゃんとしてからSLしてくださいね^^
Posted by jinkojinko at 2007年09月21日 19:51
たまたま検索でひっかかってのぞいてみました。

おもしろいスクリプトですね!!全くできない僕には大助かりです。

これからも期待してます!
Posted by はいど at 2007年12月26日 14:05
はいどさん^^

ようこそおこしくださいましたーー

だいぶん前に作ったスクリプトなので自分でも
忘れかけてますが、なにかおかしなことがあったら
また教えてくださいねー
Posted by jinkojinko at 2007年12月27日 01:12
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。