このページでは、Unity のアニメーションシステム から最高のパフォーマンスを得るためのヒントを紹介します。キャラクターの設定、アニメーションシステム、ランタイムの最適化をカバーします。
場合によっては、多数のボーンを持つキャラクターを作成する必要があります。例えば、多くのカスタマイズ可能なアタッチメントが必要な場合などです。これらの余分のボーンはビルドのサイズを増加させ、個々の余分のボーンに関連する処理コストが発生する可能性があります。例えば、すでに 30 のボーンがあるリグに 15 の追加ボーンを加えると、Generic モードで解決するのに 50% 時間が長くかかります。Generic (ジェネリック) と Humanoid (ヒューマノイド) タイプ、どちらもボーンを追加することができます。追加のボーンを使用してアニメーションを再生しない場合は、処理コストはごくわずかです。アタッチメントが存在しないか非表示の場合、このコストはさらに低くなります。
スキンメッシュは可能な限り組み合わせてください。キャラクターを 2 つの スキンメッシュレンダラー に分割すると、パフォーマンスが低下します。キャラクターがマテリアルを 1 つしか持たない場合は、キャラクターが 1 つのマテリアルを持つ方がよいですが、複数のマテリアルが必要な場合もあります。
Animator コンポーネント に Controller が設定されていなければ処理時間は増加しません。
ブレンディングなしで 1 つの アニメーションクリップ を再生すると、Unity は 古いアニメーションシステム を使うよりも遅くなる場合があります。古いシステムは非常に直接的で、カーブをサンプリングし、直接 Transform に書き込みます。Unity の現在のアニメーションシステムには、ブレンディングに使用する一時的なバッファがあり、サンプリングされたカーブやその他のデータの追加コピーを行います。現在のシステムレイアウトはアニメーションブレンディングとより複雑な設定のために最適化されています。
スケールカーブのアニメーションは、移動や回転のアニメーションよりも非常に処理コストがかかります。パフォーマンスを改善する場合は、スケールアニメーションを避けます。
注意 一定のカーブ (アニメーションクリップ の長さにおいて常に同じ値を持つカーブ) には適用されません。一定のカーブは最適化され、通常のカーブに比べて負荷がかかりません。デフォルトのシーンの値と同じ値を持つ一定のカーブは、毎フレームにシーンに書き込まれるわけではないからです。
大抵、Unity はアニメーションを評価し、アニメーションレイヤー と アニメーションステートマシン のオーバーヘッドを最小限に抑えています。他のレイヤーを Animator に追加するコストは同期されているかどうかにかかわらず、レイヤーによって再生されるアニメーションとブレンドツリーによって異なります。レイヤーのウェイトが 0 の場合、Unity はレイヤーの更新をスキップします。
以下は、ヒューマノイドタイプとジェネリックタイプを使用する際に役立つヒントです。
多くの最適化が可能ですが、以下は有用なコツの一部です。
Animator の Culling Mode を Based on Renderers に設定することによってアニメーションを常に最適化し、Skinned Mesh Renderer の Update When Offscreen プロパティを無効にします。これにより、キャラクターが表示されないときに Unity がアニメーションを更新するのを防ぐことができます。
2018–04–25 限られた 編集レビュー で修正されたページ
2017–05–16 編集レビュー 無しに修正されたページ - ページのフィードバックを残す
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.