質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

12321閲覧

物理演算で落下させたオブジェクトを積み上げた時の跳ね返りを無くしたい

sakura_hana

総合スコア11427

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

3クリップ

投稿2016/06/06 03:36

編集2016/06/06 03:39

Unity 5.3.4でゲームアプリを開発しています。

「物理演算(Unity標準の重力)を使って直方体のブロックオブジェクトを上から落とし、積み上げる」という挙動を作っています。
1個目・2個目あたりは問題無いのですが、3個目あたりから着地の瞬間、下にあるオブジェクトもろとも跳ね返る(バウンドする)動きをします。
この跳ね返りをさせないようにしたいです。

■オブジェクトの設定(ブロック・地面共通)
・Unity標準の「Cube」で生成
・Rigidbody:Drag、AngularDrag共に0。UseGravityオン。isKinematicオフ。ConstraintsはPositionYのみオフ、他は全てオン。
・BoxCollider:メッシュ全体を囲むように設定。下記のPhysicMaterialを設定。
・PhysicMaterial:DynamicFrictionとStaticFrictionを1、Bouncinessを0、Combineは両方Multiply。

■スクリプト
・クリックしたら指定の位置(固定)にブロックオブジェクトを生成する。
(後は勝手にブロックが落ちて重なる)

着地の瞬間にisKinematicをオンにしたりConstraintsをFreezeAllにしてみたりもしましたが、少し浮いた状態で止まったり、逆にめり込んだりと意図しない動きが発生します。

挙動の原因としては、落ちてきたブロックが着地時に若干めり込む→それを修復しようと下のオブジェクトも上下に動く→それが更に下に伝わる→振動が増幅されて高く積む程跳ね返る、という流れだとは思います。
(実際、速度とスリープ状態を確認すると、上の方にあるオブジェクトは見た目上は止まった後も、微弱に振動を続けていてスリープ状態になりません。負荷的にも一度重なったらスリープ状態に入って欲しいです)

スクリプトというよりエンジンの使い方の質問となりますが、解決方法をご存知の方は教えて頂けると助かります。

bochan2👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

TimeManagerの調整
Unityの物理判定のタイミングがこの値に依存している点から、
Fixed Timestepをデフォルトの0.02未満にしてより細かい演算を行うことで、
「物体の移動>タイミングによるめり込み発生>弾きかえし」による跳ね返りを防止。
http://docs.unity3d.com/ja/current/Manual/class-TimeManager.html

Physics Managerの調整
Bounce ThresholdやSleep Thresholdの値を増やして、
小さなはずみや運動を行わない様にする。
http://docs.unity3d.com/ja/current/Manual/class-PhysicsManager.html

正解かわかりませんが、Editor上では多少の効果がありました。

投稿2016/06/06 06:46

buibui80

総合スコア1033

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2016/06/10 07:22

TimeManagerの調整では上手くいかなかった(寧ろ悪化した)のですが、 Physics Managerの調整で多少改善しました。 ただ、完璧には打ち消せなかったので、引き続き調査・調整をしてみます。 情報のご提供、ありがとうございました。
guest

0

出先で未確認なのでイケるか分かりませんが 静止したオブジェクトが二度と物理挙動を示さなくても良いのであれば、rigidbodyをdestroyするのはどうですか?
他に、staticにチェックを入れたrigidbodyが動かなくなるなら、それでもイケルかもしれません。

投稿2016/06/07 04:33

ippei

総合スコア89

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2016/06/10 07:26

回答ありがとうございます。 今回の場合、静止したオブジェクトに他オブジェクトがぶつかる・状況に応じて再度落下する必要があった為、こちらの方法は取れませんでした。動作条件を詳しく書いておらず申し訳ありません。
ippei

2016/06/11 20:48

RigidBodyのsleepThresholdを上げるとスリープに入りやすくなるのでこれを調整してみるのはどうでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問