Unity は、デバイスの CPU トポロジーに基づいて スレッドアフィニティ と スレッド優先順位 を設定します。Unity のデフォルトのスレッド設定はほとんどのプロジェクトでうまく機能しますが、状況によってはスレッド設定の変更が必要になることも考えられます (例えば、特定のデバイス用に最適化したい場合や、アプリケーションを低電力消費にすることを目指していて、高フレームレートが不要な場合など)。
重要: 可能な限り Unity のデフォルトの設定を使用してください。特定のデバイス用の最適化のためにスレッドの設定を変更すると (それがどのような変更であっても)、他のデバイスや、同じデバイスの将来の OS バージョンで、パフォーマンスに悪影響が及ぶ可能性があります。
スレッドのアフィニティは、スレッドがどの CPU コアで実行されるかを制御します。Android デバイスの場合は通常、コアは以下の 2 つのカテゴリに分類されます。
重要: 一般的な、様々な Android デバイスをターゲットとするアプリケーションでは、スレッドを特定のコアにバインドしないでください。
Unity は通常、デバイスの OS から、各 CPU コアの性能と大/小の割り当ての情報を受け取ります。古いバージョンの OS の場合、この情報が利用できないことがあります。その場合 Unity は、CPU コアの性能を計算し、その情報を使用して各コアを大/小のいずれかに割り当てます。コアの割り当てを行うために、Unity は、各コアの CPU 性能をしきい値と比較します。デフォルトでは、最も低速なコアの CPU 性能の 2 倍以上の性能を持つコアは大きなコア、そうでなければ小さなコアとなります。
Unity がどのコアを大/小に割り当てるかを具体的に制御したい場合は、カスタムのしきい値を指定できます。カスタムのしきい値を指定するには、-platform-android-cpucapacity-threshold [value]
コマンドライン引数を、0 から 1024 の間の値で使用します (0 は最低性能のコア、1024 は最高性能のコアを意味します)。例えば、値 870
は 1024 の約 85% であり、CPU 性能がチップ上のコアの上位 15% に入るコアであれば大きなコアであることを意味します。Android デバイスで Unity に起動時のコマンドライン引数を追加する方法については、カスタム UnityPlayerActivity ファイルから Unity の起動引数を指定する方法 を参照してください。
ノート: Unity は、必ずコアを大/小いずれかに分類します。一部の複雑な CPU トポロジー (例: 中等のコアを持つもの) の場合も、コアは大/小いずれかに分類されます。
Unity は、スレッドのアフィニティの値に使用できるエイリアスとして、以下を提供しています。
any
: スレッドを任意のコアで実行可能にします。little
: スレッドを任意の小さなコアで実行可能にします。big
: スレッドを任意の大きなコアで実行可能にします。また、16 進数や 2 進数の値を使用してスレッドアフィニティを指定することも可能です。2 進数では、ビットのインデックスが特定の CPU コアを参照します。通常は小さなコアがインデックス 0 から始まり、大きなコアがその直後に来ます。
例えば、CPU に 4 つの小さなコアと 4 つの大きなコアが含まれている場合、以下のようになります。
0b11110000
と 16 進数値 0xf0
で、スレッドが、大きなコアで実行可能になります。0b1111
と16 進数値 0xf
で、スレッドが、小さなコアで実行可能になります。スレッドの優先度は、デバイスのオペレーティングシステムがスレッドにどのように CPU 時間を割り当てるかを制御します。オペレーティングシステムは、優先度の高いスレッドに、優先度の低いスレッドよりも多くの CPU 時間を割り当てます。
Unity で使用可能なスレッド優先度の値の範囲は –20 から 19 で、–20 は最高優先度、19 は最低優先度を表します。
このセクションには、Unity の設定可能なスレッドと、その設定に使用するコマンドライン引数についての情報を記載しています。
Android デバイスで Unity に起動時のコマンドライン引数を追加する方法については、カスタム UnityPlayerActivity ファイルから Unity の起動引数を指定する方法 を参照してください。
重要: 一部のデバイスおよび、Android OS の一部のバージョンでは、Android OS がコマンドラインパラメーターを無視してエラーをスローする場合があります。これが発生した場合、アプリケーションは問題なく実行されますが、Android は、指定されたスレッドアフィニティやスレッド優先度の設定を適用しません。
Unity のメインスレッドは、すべてのスクリプトを実行し、通常は CPU 負荷が高くなります。このスレッドに影響を与えるコマンドライン引数は以下の通りです。
-platform-android-unitymain-priority [value]
([value]
がスレッドの 優先度)-platform-android-unitymain-affinity [value]
([value]
がスレッドの アフィニティ)Unity のワーカースレッドは、コアエンジンからのジョブと、アプリケーションが C# Job System を介してディスパッチするジョブの、両方を実行します。これらのスレッドに影響を与えるコマンドライン引数は以下の通りです。
-platform-android-jobworker-priority [value]
([value]
がスレッドの 優先度)-platform-android-jobworker-affinity [value] [value1 value2 value3]
([value]
がスレッドの アフィニティ、[value1 value2 value3]
はスレッドごとのワーカースレッドのアフィニティ指定に任意で使用可能な値): 単一の値のみを設定した場合、Unity はすべてのワーカースレッドに同じ値を使用します。‘-job-worker-count’ を使用してワーカースレッドの数を指定できます。プロジェクトが マルチスレッドレンダリング を使用している場合は、Unity のレンダースレッドは Graphics API と相互作用します。
-platform-android-gfxdeviceworker-priority [value]
([value]
がスレッドの 優先度)-platform-android-gfxdeviceworker-affinity [value]
([value]
がスレッドの アフィニティ)ノート: GraphicsJobs を使用する場合、JobWorker のスレッドもグラフィックス API と相互作用します。
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.