本主题介绍了在使用 Godot 进行 Android 游戏开发时如何支持多种外形规格和屏幕尺寸。
Android 设备有多种外形规格和屏幕尺寸。常见类别包括
- 手机
- 平板电脑
- 电视和电视机顶盒
- 搭载 Android Runtime for Chrome 的笔记本电脑
这种多样性意味着您的游戏将遇到各种不同的屏幕分辨率。这些屏幕分辨率通常具有不同的宽高比。例如
- 横向的 19:9 宽高比手机 (2280x1080)
- 横向的 20:9 宽高比手机 (3200x1400)
- 1080p 高清电视,宽高比为 16:9 (1920x1080)
- 宽高比为 4:3 的平板电脑 (2048x1536)
您的游戏设计应考虑这些差异,以确保无论屏幕分辨率、设备宽高比和用户输入方法如何,都能正确显示。
显示分辨率
Godot 使用像素定义屏幕分辨率和大小。我们建议您为 Godot 项目设置标准的基础分辨率。Godot 提供了设置,用于控制当显示分辨率与项目的基础分辨率不同时的行为。
设置基础分辨率
要为项目设置基础分辨率,请在 Godot 编辑器中打开项目后执行以下步骤
- 从 Godot 菜单栏中选择 **“项目”->“项目设置…”**。
- 在 **“项目设置”** 窗口中,在 **“类别”** 标签页中找到 **“显示”** 列表,然后选择 **“窗口”** 项。
- 在 **“尺寸”** 类别下,将 **“宽度”** 和 **“高度”** 字段设置为所需的像素测量基础分辨率。

当 Godot 编辑器设置为 2D 视图时,它会显示一个与基础分辨率对应的引导矩形。当从编辑器运行项目或场景时,基础分辨率用作项目窗口的默认尺寸。

拉伸设置
有两个设置控制当基础分辨率与显示分辨率不同时如何调整基础分辨率:**“拉伸模式”** 和 **“拉伸宽高比”**。这些设置位于 **“项目设置”** 窗口的 **“显示”->“窗口”** 部分。

**“拉伸模式”** 有三个设置:disabled
、2d
和 viewport
。下一部分包含不同 **“拉伸宽高比”** 和 **“拉伸模式”** 设置的视觉示例。所有示例都使用 320x180 像素的项目基础分辨率。
`disabled` 设置不调整或更改基础分辨率。如果 **“拉伸模式”** 设置为 disabled
,则 **“拉伸宽高比”** 的值始终会被忽略。

disabled
,显示分辨率为 320x180如果显示分辨率小于基础分辨率,则底部和/或右侧边缘将被裁剪。

disabled
,显示分辨率为 256x128如果显示分辨率大于基础分辨率,则多余区域留空。

disabled
,显示分辨率为 512x256`2d` 设置会将基础分辨率缩放到显示分辨率。对于使用 2D 美术的项目,这会导致由于基础分辨率和显示分辨率之间不再存在 1:1 像素比而产生的缩放伪影。此设置可能适用于不需要像素级完美渲染的项目中的某些高分辨率美术风格。
**“拉伸宽高比”** 设置指定了应用于缩放的约束,以保持基础分辨率的宽高比。**“拉伸宽高比”** 设置选项在“宽高比”部分进行描述。下面是使用 **“拉伸宽高比”** 为 ignore
的 2d
**“拉伸模式”** 设置的示例,它将缩放到显示分辨率而不受任何约束

2d
,显示分辨率为 256x128
2d
,显示分辨率为 512x256`viewport` 设置将根场景的 Viewport
设置为基础分辨率。根 Viewport
的渲染输出随后会缩放到显示分辨率。Godot Viewport
对象用于创建屏幕视图,或在另一个 Viewport
内创建子视图。与 2d
设置不同,viewport
设置在缩放到显示分辨率时不会应用过滤。`viewport` 设置还使用 **“拉伸宽高比”** 的值来确定是否应用约束以保留宽高比。当需要像素级完美精度时,viewport
设置比 2d
设置是更好的选择,因为主要渲染仍然在基础分辨率下进行。下面是使用 **“拉伸宽高比”** 为 ignore
的 viewport
**“拉伸模式”** 设置的示例

viewport
,显示分辨率为 256x128
viewport
,显示分辨率为 512x256宽高比
**“拉伸宽高比”** 有几个宽高比缩放约束选项。如果 **“拉伸宽高比”** 设置为 ignore
,则不应用任何约束。当 **“拉伸宽高比”** 设置为 keep
时,基础分辨率将缩放到适合显示分辨率的最大尺寸,同时保持原始宽高比。显示屏中未被缩放图像覆盖的区域将填充黑色条。根据宽高比差异的主导维度,这些条将是水平条(称为信箱)或垂直条(称为柱状)。

viewport
,拉伸宽高比 keep
,显示分辨率为 384x256
viewport
,拉伸宽高比 keep
,显示分辨率为 512x200**“拉伸宽高比”** 包含 keep
设置的两个变体:keep_width
和 keep_height
。当设置为 keep_width
时,如果显示分辨率的宽高比宽于基础分辨率,则会添加柱状黑边。但是,如果显示分辨率的宽高比高于基础分辨率,则多余区域留空。空白区域会填充屏幕底部。

viewport
,拉伸宽高比 keep_width
,显示分辨率为 512x384`keep_height` 设置在水平方向而不是垂直方向起作用。空白区域会填充屏幕右侧。

viewport
,拉伸宽高比 keep_height
,显示分辨率为 512x200最终的 **“拉伸宽高比”** 设置是 expand
。`expand` 设置保持基础分辨率宽高比,但会将多余区域留空,而不是添加信箱或柱状黑边。

viewport
,拉伸宽高比 expand
,显示分辨率为 384x256
viewport
,拉伸宽高比 expand
,显示分辨率为 512x256锚点
在支持多种屏幕分辨率时,UI 元素定位需要额外的考虑。例如,使用绝对像素坐标将控件放置在右上角会导致在具有不同水平分辨率的设备上定位不一致。Godot 的 UI 系统支持使用 Anchor
和 Margin
属性进行相对定位。UI 元素的 Anchor
属性指定其父控件对象或视口上的锚点。然后,Margin
属性的值用于相对于其锚点偏移控件。
对象必须派生自 Godot Control
对象,才能包含 Anchor
和 Margin
属性。Godot 的标准 UI 元素都派生自 Control
。当在 Godot 编辑器中选择派生自 Control
的对象时,**“检查器”** 标签页中会显示 Anchor
和 Margin 的属性字段。

Button
控件,其 **“锚点”** 和 **“边距”** 属性在检查器中可见Godot 有一个 **“布局”** 工具,可以快速将 Anchor
、Margin
和 Size
属性设置为常用预设值。当在编辑器中选择派生自 Control
的对象时,场景视图上方的工具栏中会提供 **“布局”** 下拉菜单。**“布局”** 工具预设包括定位和定位与大小的组合。定位预设支持的用例包括:居中、锚定到右上角、锚定到左中。定位加大小预设包括锚定到底部同时跨越整个父宽度等用例。

锚点适用于平视显示器、屏幕提示或基本对话框等常见用例。Godot 的 容器 系统旨在用于更复杂的 UI 布局,例如显示包含大量控件的窗口或对话框,或动态调整内容大小。
视场
Godot 具有视场设置,用于控制 3D 场景在不同宽高比下的呈现。视场调整由 Camera
对象的 Keep Aspect
属性控制。Keep Height
的默认值适用于横向运行的项目。当基础分辨率和显示分辨率的宽高比不同时,Keep Height
会调整为更宽或更窄的视场。Keep Width
设置对于纵向运行的项目是更好的选择。Keep Width
会根据宽高比差异调整为更高或更短的视场。
视口控制
Viewport
对象提供对宽高比和缩放的精细控制。项目可以使用 Viewport 执行以下操作,例如
- 以其基础分辨率宽高比渲染场景,并带有与分辨率无关的边框。
- 以较低分辨率渲染 3D 场景以提高性能,并将其放大到原生分辨率显示。
- 为 VR 应用渲染场景的左右眼视图。
- 生成动态纹理。
有关演示如何使用 Viewport 对象的示例,请参阅 Godot Viewport 示例。
用户输入
某些游戏设计与 Android 支持的所有输入模式不兼容。支持多点触控手势的游戏通常在添加对鼠标和游戏手柄输入的支持时遇到问题。围绕游戏手柄输入设计的游戏可能难以实现有效的触摸控制。Godot 支持所有这些输入形式,但您应该在开发早期决定您打算在项目中使用的输入方法并进行相应的设计。
对于触摸和鼠标输入可互换的项目,Godot 包含代理选项,可以从鼠标事件生成模拟触摸事件,反之亦然。这些选项消除了为鼠标和触摸事件编写单独输入处理代码的需要。可用选项是:**“从鼠标模拟触摸”** 和 **“从触摸模拟鼠标”**。这两个选项都位于 **“项目设置”** 的 **“输入设备”->“指向”** 部分。
