ここから本文です

Unityのrigidbodyについて

kak********さん

2012/10/1522:16:42

Unityのrigidbodyについて

Y軸中心に回転している大きなCubeに小さいCubeが引き寄せられる、というのはできたのですが、
大きなCubeが回転しているところに小さなCubeが引き寄せられると、
小さなCubeはくるくる回ったり、別の面に移動するような形で引き寄せられるようになってしまいました・・・

小さなCubeが引き寄せられ、大きいCubeに付いた最初の面で、くっつき固定された状態で大Cubeの回転を続けさせたいのですが、
どのようにすればいいでしょうか。

閲覧数:
1,831
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

ゑふさん

2012/10/1523:48:53

> 大きいCubeに付いた最初の面で、くっつき固定された状態
というのは、着弾したというイメージでしょうか?
また、固定というのは、小さいCubeが、大きいCubeに合体(?)して、勝手に動く事が無い、という意味でしょうか?

//月のオブジェクトに持たせるスクリプト・2
var target_earth : GameObject; //ターゲットとなるオブジェクト(地球を指定)
var my_gravity : float; //引き寄せられる力(引力。月の重さを大きく超える値で)
var g_angle : Vector3; //月から見た地球の方向

var moveing_moon = true; //月が動いている状態か否か

function Update () {
if(moveing_moon){ //月が動いている時のみ有効
g_angle = target_earth.transform.position - transform.position; //座標を引き算して地球の方向を出す
rigidbody.AddForce(g_angle.normalized * my_gravity); //地球のある方向に向かって荷重をかける
}
}

function OnCollisionEnter(collision : Collision) { //月が何かのコリジョンに衝突したら呼ばれる関数
if(collision.gameObject == target_earth){ //衝突相手が地球の場合
moveing_moon = false; //月の移動を終了
rigidbody.constraints = RigidbodyConstraints.FreezeAll; //全ての回転と移動を制限
transform.parent = target_earth.transform; //月を地球の子オブジェクトに指定
}
}


これまた、かなり大雑把ですが、月が地球に衝突した瞬間に、月を地球の子オブジェクトにしてしまいます。
そして、月がこれ以上勝手に動かないように、全ての方向の回転と移動を制限してしまいす。
これで、後は地球が回ったり移動したりするのに付いていくようになるかと思います。
まぁ、いずれにしても、これを改造するなりして、もっと目的にあったスクリプトにする必要はあるでしょうけど^^;
いかがでしょうか?

質問した人からのコメント

2012/10/18 23:47:34

2回も答えていただいてありがとうございました!!
結構参考にさせていただきました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる