2017-08-21 13 views
0

私はオブジェクトをaproxから構築しています。 1700の小さなキューブメッシュ(かなりシンプルなメッシュ)。ヒットした場合、他のオブジェクトがヒットしてから数秒後に元に戻そうとしています(トリガーは他の衝突です)。 結果が非常に劣悪なパフォーマンスの間にあり、完了するまでに時間がかかります。現場で1000人以上の剛体を動かそうとすると、体調が悪くなります。

  • 制限オブジェクトを1つの衝突トリガに何度も繰り返し活性化を避けるために:私は、これまで実行しようとしました何

  • オブジェクト物理を無効にする
  • 物理と変換を直接使用してオブジェクトを移動する。

どのような問題があるようですか?その多くのオブジェクトや衝突を統一することさえできますか?

+0

Unityが処理できるものは少なく、実行しているコンピュータの詳細はありません。あなたがスーパーコンピュータで開発し、それがモバイルで実行することを期待する場合、あなたは失望します。 – Catwood

+0

"他のオブジェクトがヒットした後、数秒後に原点に戻そうとしています(トリガーは他の衝突です)。それから剛体を使用する必要がありますか? ...そうでない場合は、ちょうどファントムまたは他の形の光交差チェックを使用してください。あなたはそれ以上の助けのために十分な情報を提供していません。 – George

答えて

1

問題は、Unityの物理がネイティブな解決策ではないということです。 Unityは物理学のためにPhysXを使用していますが、それらはブラックボックスのように使用されるため、Unityはどのようにして動作するのか分かりません。そのため、すべての物理ベースの操作は複雑で、性能はかなり悪いです。 1000の物理ベースのオブジェクトは、Unity3dによって多く処理されるようです。 Unityの唯一の制限ではありません。たとえば、約10000個のゲームオブジェクトを作成した場合(どの機能を持っているかにかかわらず)、Unityのエディタもフリーズすることができます。

あまりありません可能なソリューションのためとして、あなたが行うことができます:

最適化ガイドを通して
  • ルックやベストプラクティスhereherehere
  • Physicsのパフォーマンスを最適化するためにUnityのプロファイラを使用する(物理ベースの「スパイク」を削除しようとする)
  • 現在のシーンでは見えないゲームオブジェクトを無効にするシステムを開発してください。
  • メッシュとコライダーを単純化してみてください。または、相互作用が必要なときに小さな部分に分割する1つの大きなメッシュを作成しようとします。
  • 数学的に簡単な物理を作成してみてください。私はそれが本当に複雑になることを知っていますが、普遍的な物理的解決法ではなく、PhysXよりもはるかに優れた性能を持つかもしれません。

とにかくそれは困難な闘いになるでしょう。

2

プロファイラのスクリーンショットは、このような状況に適したソリューションを考えるのが簡単になります。ドローコールや衝突がこの問題を引き起こすとは思わない。 Unity3Dプロファイラの詳細はhereです。固定の更新で物理学を扱い、剛体の属性の異なる組み合わせを試してみることができます(補間など)。がんばろう。

関連する問題