ソラマメブログ
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 2人
オーナーへメッセージ

2007年11月15日

ジンベイは未だ問題解決せず。

昨夜ジンベイザメが重さに耐え切れず、地面の中に吸い込まれていってしまったのだが、その原因がどうも分からない。
まずはジンベイザメの構成を説明する。

ジンベイは未だ問題解決せず。

このように、Sculptedプリム2個で構成されており、今回はメインのスクリプトはヒレの方に入れ、大きな本体にはSculptedテクスチャを張り替えて、尾びれを動かすためのスクリプトだけを入れてあった。
何故こうしたか?特段の理由は無いが、2プリムあるからそれぞれにスクリプトを入れてみただけである。
別にどちらに入れても同じだとは思う。

そしてジンベイザメのサイズは、本体の長さでSmall(4m)、Middle(6m)、Big(8m)の3サイズが指定できるようにしてある。
このような状態で動かしてみたのであるが、Smallで動かした時は普通に動いた。
が、MiddleやBigにサイズ変更して動かすと、動き出した直後から沈みだし、ファントムだったからそのまま地面の中へと消えていってしまった。

ここで未だに謎なのだが。。。地面に消えていったジンベイは、その後跡形も無く消えてしまい、どこにも存在しないようなのだ。まさか地球の裏側まですり抜けていって・・・反対側のSIMに出ている、なんて事はありえないであろうな。。。

この対策で最初に試したのは、エネルギー切れをして落ちるのでは無いか?と言う事で、「物理オブジェクトに永続的な力を加える」->llSetForce(vector force, integer local)を使う事だった。
lslwikiの例を見習って次のような1行を、llMoveToTargetを発行する直前に付け加えてみた。
llSetForce(llGetMass() * <0,0,9.8>, FALSE);

vector forceはベクターなので<x、y、z>に対応しているから、この場合は自分の質量にz方向(だから浮力になると思う)へ9.8倍している事になる。
integer localは、この作用をLocalにするかSIMにするかの指定のようで、Localの場合はTRUE にするらしい。
9.8と言う数字はgravity constant(重力定数)としてサンプルに出ていた数字をそのまま使っただけ。

でこの結果だが、ジンベイザメはBigサイズにしても見事沈むことなく悠然と泳ぎだしてくれた。
が・・・時々瞬間的に上空に飛ぶ。一瞬ではあり、即元の位置に戻るのだが、時々ヒューと10m程度上に上がってしまう。
そこで、9.8を1.0に変えてみたら、上がる程度は小さくなったが、やはりヒョコヒョコと上下動してしまう。
なんかの拍子にエネルギーが過多で一瞬上がってしまうような感じだ。

その他、llGetMass()で質量を測ってみたり、llGetEnergyで残エネルギーを表示させてみたりもした。
その結果で見ると、llSetForceを使っていた場合でも以下のような感じになる。
<Small>
質量=28.781761
移動中の残エネルギー=1.0
<Middle>
質量=97.138443
移動中の残エネルギー=0.971050 - 1.0
<Big>
質量=230.254089
移動中の残エネルギー=0.776803 - 1.0

と言う事で、やはりサイズが大きくなると、その分エネルギー消費も大きくなるようだ。
ちなみにllSetForceを使わないと、移動中の残エネルギーはBigの場合は0.01以下になってしまい、更に低下してくると地面の中に降下して行き、その内消滅してしまった。

例えばマンタの場合だが、スーパービッグ(全長10mだが本体部分だけだと約6m)で質量=172.075592
移動中の残エネルギー=1.0
とllSetForceを使っていないにも関わらず安定している。質量だけならジンベイのMiddleより大きいのだが・・・

そんな訳で、今までの製作物ではllSetForceも使う必要も無く、問題無く動いていたのであるが・・・何故ジンベイだとこのような現象が発生してしまうのだろう?
マンタの移動スクリプトをそのままジンベイに入れても、同様の現象が発生しているので、単にスクリプト上だけの問題とも思えない。
更に、Sculptedテクスチャの張替えスクリプトを外しても、改善はされなかったので、Sculpted張替えの負荷によるとも思えない。
そしてβグリットのスカスカ状態の場所で動かした場合も残エネルギーは同様な状態であるが、地面への落下は見られないし、
llSetForce(llGetMass() * <0,0,1.0>, FALSE)を入れた状態でのヒョコヒョコ現象は発生しない。
が、9.8にしたら上空へとドンドン上昇して見失ってしまった・・・アワワ。上空1000mで補足して確保したw

うーん。。。どうもイマイチ判然としない。
ジンベイザメもこの問題さえクリアできれば完成なのだがな~。。。もう少し時間がかかりそうだ。
又何か分かったら報告しますね。


同じカテゴリー(スクリプトのお勉強メモ)の記事画像
llDetectedTouchST
llAddToLandPassList
【注意】Bulk Permissions機能は使っては駄目!
HTTP-INを使ってみた。
オブジェクトへの指示
ペットを作るには(6)
同じカテゴリー(スクリプトのお勉強メモ)の記事
 llDetectedTouchST (2009-07-24 14:05)
 llAddToLandPassList (2009-07-24 10:23)
 【注意】Bulk Permissions機能は使っては駄目! (2009-07-21 12:15)
 HTTP-INを使ってみた。 (2009-07-19 14:51)
 オブジェクトへの指示 (2008-10-22 12:42)
 ペットを作るには(6) (2008-09-25 10:38)
この記事へのコメント
お魚をいただいて置くだけの私には想像もつかないご苦労ですー!
完成までがんばってくださいーー!と応援するのみですーーT0T
Posted by keito at 2007年11月15日 14:06
お久しぶりです。

私もせっかく作ったオブジェクトを何度も"お星様"にしました^^;
これが原因とハッキリいけるほど検証してないのですが、SetForceは"重ね掛け"しない方がいい…気がします。

非物理→物理に変更した後に1回だけ設定するとか、
重量が変化(サイズ変更やsitした)時に一旦Forceを0にしてから設定するとぶっとびは防げると思います。

もし既にそうしてたらすいませんm(_ _)m
Posted by Nullpo at 2007年11月16日 11:22
> Keitoさーん
応援してくれるだけで心強いです。
頑張りますのでよろしくー。

> Nullpoさん。毎回アドバイスありがとうございます。

>SetForceは"重ね掛け"しない方がいい…気がします。
アワワ・・・そうなんですね。
今夜not_at_target内にエネルギー不足を補うため、SetForceを入れてしまおうかと・・・
試しだからやっては見ますね。何処かへ飛んでいってしまうかも知れませんがw

後の部分も試してみますね。
なんとしても8mサイズのジンベイザメを実現したいですからね。
駄目だったら4mのベビー・ジンベイザメでご勘弁を。
Posted by Gonbe ShanGonbe Shan at 2007年11月16日 16:53
こんにちは。
わたしはバルーンを作った時、llSetBuoyancyで無重力状態にして、いまより少し大きめのバルーンを飛ばそうとしましたが、すぐに地面に落ちてしまいました。
最初は中を空洞にしようとしたんですけど、スカルプは空洞にできないんですね。
なので、いまの大きさまで小さくしました。
乗り物スクリプトだと中身が詰まった10m×10m×10mの立方体でも浮かすことはできますけど、
物理の関数はもっとエネルギーに対する制限がきびしいみたいですね。
もっと大きく作りたいのに・・・。
Posted by Lafeel Furse at 2007年11月16日 22:56
おー!Lafeelさんではないですか!

最近はSOLAの島とかで源さんで荒らしまわっているとか。あそこのオーナーさん(かな?)もマンタのお客様なんですよ。よろしくね。

で、ジンベイザメは8mサイズでも動きましたよ。答えは本当に意外な結果。
新しいBlogを見てご意見でも下さい。
まだ信じられない結果です。w
Posted by Gonbe ShanGonbe Shan at 2007年11月19日 23:32
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。