Oculus Quest / Unity もろもろ

Oculus Quest のゲームレビューと、Unityを使った開発について書く

Unityでどうにもうまくオブジェクトが反発しないときの確認事項

Unity初心者としては、ちゃんとやっているはずなのに、どうにも壁にボールとかが跳ね返ったりしないことがある。
そんなときの確認事項。

Bounce Threshold を確認

一番簡単なやつ。
Unityでは一定速度以下の衝突を無視するようになっている。
多分、シミュレーションを軽量にしたり、例えば重力でバウンドしているのがいつまで経っても静止しない問題を解決するためとかだと思う。
[Edit] > [Project Settings...] を開いてBounce Thresholdを0.1とかにしてみる。 f:id:malt03:20190530012512p:plain

オブジェクトごとのMassを確認

オブジェクトの位置をコードで固定していたりしても、Massの値によって固定している方のオブジェクトを押せてしまう。
Massを著しく重くしちゃえばひとまず解決する。

オブジェクトのvelocityを確認

オブジェクトをコードで移動させていると、velocityが0になってしまっているので、速く動いているように見えてもシミュレーション上は静止している壁と同じ。
基本はaddForceで動かすべきだし、どうしてもそうは行かない場合はvelocityの値も無理やりいじる。

Collider の Material を確認

Collider の Material で反発のしやすさを変更できる。公式ドキュメントが素晴らしい。 docs.unity3d.com

Rigidbody の Collision Detection を確認

シミュレーションを軽量にするために、デフォルトだとフレーム毎に重なっているオブジェクトに対してしか衝突判定を行わない。
つまり速い速度で動いているオブジェクトはすり抜けうるということ。
↓の記事がとてもきちんと検証されていて素晴らしく参考になった。

ekulabo.com