2016-09-30 8 views
0

私はプレハブとして2つのSphere GameObjectを持っています。それらには剛体が取り付けられています。私は彼らが表面に置かれているが、衝突したときに互いにやりとりしたい(お互いに押し寄せ、お互いに跳ね返る)。しかし、ゲームビューでは、プレハブをドラッグして剛体の「重力の使用」チェックボックスをオフにすると、オブジェクトが浮いてしまいます!私はこれを望んでいないので、私は「重力を使う」ようにしました。今、彼らは場面に置かれますが、床に落ち着くまでにはまだ長い時間がかかります。それらをドラッグすると、そこにはまだまだ浮遊することがあります。どのように私はそれらを表面にとどまらせるが、お互いに相互作用するようにするのですか?GameObject Prefabs浮動小数点

私は

(Get-the-GameObject).GetComponent<Rigidbody>().velocity = Vector3.zero; 

ような何かをやって試してみましたが、それは何もしません。

私は床に球を置きましたが、浮いています。物理エディタでは、重力は-9.81のY成分に設定されます。

編集:自分の球の鱗を約5に小さくして、床に落として左に滑り始めます。フロアは...それは今の周りにスライドされて、なぜ私が疑問に思ってそうどのような方法で傾いていない

編集:

球は、あなたが望むその色を持つボックスをクリックし、上にドラッグすることでインスタンス化されていますデスクスペースとリリース。ひとたびリリースされると、浮き上がったり滑ったりする。ここでそれを行うコードです。

void OnMouseDown() 
{ 
    clone = (GameObject)Instantiate(prefab_to_instatiate, hit.point, Quaternion.identity); 
} 

void OnMouseDrag() 
{ 
    // Code to make an atom follow the mouse cursor 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 

    RaycastHit hit2; 
    if(Physics.Raycast(ray, out hit2, Camera.main.farClipPlane)) 
    { 
     float oldY = transform.position.y; 
     clone.transform.position = new Vector3(hit2.point.x, oldY, hit2.point.z); 
    } 
} 

enter image description here

編集2:私はビデオを提供する場合に何が起こっているかを説明するための最良の方法です。ここをクリックしてください:https://vimeo.com/185419058

原子を含むボックスをクリックし、マウスボタンを押したまま机の領域にドラッグして離します。しかし、私がドラッグすると、マウスが静止していても、ビデオは原子が狂ったように跳ね返っていることを示します。それから、私が解放すると、それは滑り始めます。私はちょうどクリックし、ドラッグし、これらの狂気の影響をすべて受けることなく、その位置に配置したい。これは、すべての私の完成した原子の上に剛体を取り除きたい場合に、私がしたいことがどのように働くかです。しかし、私は剛体を使うことができるようにしたいのです。なぜなら、原子同士が互いに接近したときに相互作用するようにしたいからです。

+0

ワールドスケールに関連したオブジェクトのスケールはどのくらいですか?彼らが巨人であれば、重力の影響はちょっと浮いて見えるでしょう。 – Serlite

+0

私の球の尺度は40-50です。 – noblerare

+0

球の動きを支配する他のスクリプトはありますか?球体のシーン階層/プロパティを見ることはできますか? – Serlite

答えて

2

物理エンジンの制御下にあるオブジェクトを制御しようとしているためです。帝国に2人の王がいるように、戦争や紛争が起こることは明らかです。

物理エンジンはすべてのFixedUpdate()、0.02秒のデフォルト設定を更新し、OnMouseDrag()はすべてのフレームで実行されます。

マウスがダウンしている間、すべてのフレームでOnMouseDragが呼び出されます。あなたのOnMouseDrag()あなたがtransform.positionを使用して位置を設定しているに

https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDrag.html

、それは非物理学の手法です。 Rigidbody.MovePosition()またはRigidbody.positionをお試しください。私はまだそれを試していない、私は自分の物理シミュレーションを書くことを好みます。

https://docs.unity3d.com/ScriptReference/Rigidbody-position.html

https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html

それはあなたの問題を解決しなかった場合、あなたはOnMouseDrag()は、競合を避けるために有効であるとあなたがマウスを離したときに、背中にそれを回しながら、rigidbody.enabled = falserigidbodyをオフにしてみてください物理エンジンに制御を戻します。

+0

'Rigidbody.MovePosition'を使用しても動作しませんでしたが、' rigidbody'をオフにして、 transform.position'移動しました!注意: 'rigidbody'を無効にすると' isKinematic'をtrueに設定し、逆も同様です。今はすべてが動作します!私は新しい原子をインスタンス化するためにクリックすることができ、それを適切な場所にドラッグしてリリースし、うまく落ちてそこに残ります。私にとって完璧な答え。 – noblerare

+0

ええ、物体を動かしながら剛体を無効にすることを忘れてしまったのは、剛体を持たない衝突者が静的な衝突者(移動しない)であると仮定しているため、システムに重大な過熱を引き起こします。トグルするのはキネマティックが良いです:D –

+0

@noblerareだからこれらは原子です!いいよ!あなたがタイトルをリリースしたときに私に知らせてください;) –

関連する問題