包含此页的版本:
不含此页的版本:
如果应用的帧缓冲区方向与设备的原生显示方向(对于大多数设备来说是纵向的)不匹配,则 Android 会每帧旋转应用的帧缓冲区以匹配设备的显示。根据设备的硬件功能,这种额外的轮换可能会对性能产生负面影响。如果您的应用程序使用 Vulkan 图形 API 并且设备支持 Vulkan,则 Unity 可以在渲染期间应用此旋转,从而减少旋转对性能的影响。这称为预旋转。
若要使 Unity 应用预旋转,可以使用 C#脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表或 Unity 编辑器:
通过 C# 脚本:将 PlayerSettings.vulkanEnablePreTransform 设置为true.
通过 Unity 编辑器:
选择 编辑>项目设置(Project Settings) 。
在项目设置广泛的设置集合,允许您配置物理、音频、网络、图形、输入和项目的许多其他区域的行为方式。更多信息
请参阅术语表窗口中,选择 播放器(Player) 选项卡,然后打开 Android 播放器设置(Android Player Settings)。
在“其他设置”部分中,启用“在渲染期间应用显示旋转”。
Unity 在直接渲染到设备的后台缓冲区时应用预旋转,而不是在渲染到渲染纹理(Render Texture) 一种特殊类型的纹理,在运行时创建和更新。要使用它们,请先创建一个新的渲染纹理,并指定要渲染到其中的摄像机之一。然后,你可以在材质中使用渲染纹理,就像使用常规纹理一样。更多信息
请参阅术语表.为了应用旋转,Unity 修改了影响UNITY_MATRIX_MVP和UNITY_MATRIX_P 内置着色器变量。这意味着 Unity 在顶点中应用旋转着色器在 GPU 上运行的程序。更多信息
请参阅术语表.
使用预轮换不会影响 Unity 的 C# API 的行为。例如,您仍然可以使用Screen.width以访问屏幕的宽度。这同样适用于视口用户在屏幕上应用的可见区域。
请参阅术语表和剪刀式矩形。Unity 会根据需要调整这些作,并处理来自后台缓冲区的回读作,例如 Grab Pass、ReadPixel 或 Screenshot。
Unity 提供了实用工具宏来处理着色器中的特殊情况(有关更多信息,请参阅下面的限制部分)。
仅当以下所有条件都成立时,才会定义宏UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION(否则,它未定义):
preTransform在播放器设置中启用UNITY_DISPLAY_ORIENTATION_PRETRANSFORM 是设置为当前preTransform旋转。其值为以下值之一:
UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_0UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_90UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_180UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_270如果UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION未定义,或者渲染到渲染纹理时,UNITY_DISPLAY_ORIENTATION_PRETRANSFORM的值为UNITY_DISPLAY_ORIENTATION_0。
UNITY_DISPLAY_ORIENTATION_PRETRANSFORM被转换为 Vulkan 专用常量,这使得在 if 或 switch 语句中使用起来非常有效。
在以下情况下,启用 preTransform 可能需要对 Unity 项目进行额外修改,然后才能使用它:
SV_Position)这些情况仅在直接呈现到后台缓冲区时适用。