アプリケーションのフレームバッファの向きが、ディスプレイのネイティブな向き (ほとんどのデバイスでは縦向き) と一致しない場合、Android では、描画されたフレームが画面に表示されるたびに、追加の回転を適用する必要があります。この追加の回転は、デバイスのハードウェア性能によっては、パフォーマンス上のコストがかかる場合があります。
大抵は、レンダリング中にこの回転を適用しても、オーバーヘッドはほとんどありません。これを行うには、Android の [Player Settings(class-PlayerSettingsAndroid) (PlayerSettings.vulkanEnablePreTransform
参照) に移動し、Apply display rotation during rendering を有効にします。
ノート: 回転は、Unity がバックバッファに直接レンダリングするときにのみ適用されます。レンダーテクスチャへのレンダリング時には効果がありません。
回転を適用するために、Unity は射影行列 (UNITY_MATRIX_MVP, UNITY_MATRIX_P) を修正します。つまり、回転自体が頂点シェーダーで適用されます。
preTransform
の設定は、Unity の C# API の動作には影響しません。例えば、 Screen.width
の値は、preTransform
の設定のために変更されることはありません。また、ビューポートや scissor rect についても同様です。Unity はこれらを必要に応じて調整し、Grab Pass、ReadPixels、Screenshot などのバックバッファからのリードバック操作も処理します。
Unity では、シェーダーの特殊なケースに対応するためのユーティリティマクロを用意しています (詳細は、後述の Known limitations のセクションを参照してください)。
マクロ UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION は、以下の条件がすべて真である場合にのみ定義されます (そうでない場合は未定義です)。
preTransform
が Player 設定で有効になっていること。UNITY_DISPLAY_ORIENTATION_PRETRANSFORM は定数で、現在の preTransform
回転に設定されます。その値は以下のいずれかです。
UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION が未定義の場合、またはレンダーテクスチャにレンダリングする場合、UNITY_DISPLAY_ORIENTATION_PRETRANSFORM の値は UNITY_DISPLAY_ORIENTATION_0 です。
UNITY_DISPLAY_ORIENTATION_PRETRANSFORM は、Vulkan の特殊化定数に変換されているので、if
や switch
文で使用すると効率的です。
以下のケースでは、preTransform を有効にするために、Unity プロジェクトに追加の修正が必要になる可能性があります。
SV_Position
)。これらのケースは、バックバッファに直接レンダリングする場合にのみ適用されます。
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.