# iOS 脚本

> Understand scripting for iOS.

iOS 设备的大多数功能通过 [Input](/engine/6000.0/script-reference/unity-engine/input.md) 和 [Handheld](/engine/6000.0/script-reference/unity-engine/handheld.md) 类公开。在跨平台项目中，可以通过定义 **UNITY\_IPHONE** 来条件编译 iOS 特定的 C# 代码。

## 设备属性##device-properties

您可以访问许多设备特有的属性。请参考以下脚本文档：

* [SystemInfo.deviceUniqueIdentifier](/engine/6000.0/script-reference/unity-engine/system-info/device-unique-identifier.md)
* [SystemInfo.deviceName](/engine/6000.0/script-reference/unity-engine/system-info/device-name.md)
* [SystemInfo.deviceModel](/engine/6000.0/script-reference/unity-engine/system-info/device-model.md)
* [SystemInfo.operatingSystem](/engine/6000.0/script-reference/unity-engine/system-info/operating-system.md)

## 反盗版检查##anti-piracy-check

一种常见的应用破解方式是移除 AppStore 的 DRM 保护并免费重新分发。nity 提供了反盗版检查功能，用于检测应用是否在提交到 AppStore 后被篡改。

通过 [Application.genuine](/engine/6000.0/script-reference/unity-engine/application/genuine.md) 性可以检查应用是否为正版（未被破解）。如果该属性返回 `false`，您可以警告用户正在使用破解版应用，或者禁用某些功能。

\*\*注意：\*\*将 [Application.genuineCheckAvailable](/engine/6000.0/script-reference/unity-engine/application/genuine-check-available.md) 与 `Application.genuine` 结合使用，以验证应用的完整性。由于访问 [Application.genuine](/engine/6000.0/script-reference/unity-engine/application/genuine.md) 是资源密集型操作，因此不应在帧更新或其他时间敏感的代码中调用。

## 振动支持##vibration-support

通过调用 [Handheld.Vibrate](/engine/6000.0/script-reference/unity-engine/handheld/vibrate.md) 可以触发设备振动。不支持振动硬件的设备将忽略此调用。

## 活动指示器##activity-indicator

移动操作系统内置了活动指示器，可在执行慢速操作时使用。有关示例，请参阅 [Handheld.StartActivityIndicator 文档](/engine/6000.0/script-reference/unity-engine/handheld/start-activity-indicator.md)。

## 屏幕方向##screen-orientation

您可以在 iOS 和 Android 设备上控制应用的屏幕方向。通过检测方向变化或强制设置特定方向，可以创建基于用户握持设备方式的应用行为。

要获取设备方向，请访问 [Screen.orientation](/engine/6000.0/script-reference/unity-engine/screen/orientation.md) 属性。允许的方向如下：

| **方向**                 | **行为**                            |
| ---------------------- | --------------------------------- |
| **Portrait**           | 设备处于纵向模式，直立握持设备，主屏幕按钮位于底部。        |
| **PortraitUpsideDown** | 设备处于纵向模式，但是上下颠倒，直立握持设备，主屏幕按钮位于顶部。 |
| **LandscapeLeft**      | 设备处于横向模式，直立握持设备，主屏幕按钮位于右侧。        |
| **LandscapeRight**     | 设备处于横向模式，直立握持设备，主屏幕按钮位于左侧。        |

将[屏幕方向 (Screen.orientation)](/engine/6000.0/script-reference/unity-engine/screen/orientation.md) 设置为上述方向之一，或使用 [ScreenOrientation.AutoRotation](/engine/6000.0/script-reference/unity-engine/screen-orientation/auto-rotation.md) 启用自动旋转。启用自动旋转后，您仍可以根据需要禁用某些方向。

更多信息请参考以下 API 文档：

* [Screen.autorotateToPortrait](/engine/6000.0/script-reference/unity-engine/screen/autorotate-to-portrait.md)
* [Screen.autorotateToPortraitUpsideDown](/engine/6000.0/script-reference/unity-engine/screen/autorotate-to-portrait-upside-down.md)
* [Screen.autorotateToLandscapeLeft](/engine/6000.0/script-reference/unity-engine/screen/autorotate-to-landscape-left.md)
* [Screen.autorotateToLandscapeRight](/engine/6000.0/script-reference/unity-engine/screen/autorotate-to-landscape-right.md)

应用的屏幕方向可能会根据用户设置的设备方向而变化，无论应用的默认方向设置如何。

下表显示了为应用程序设置的默认屏幕方向以及应用程序根据设备方向加载的实际方向。

|               | **默认屏幕方向：自动旋转**                                                                                                                                                                                                                                                                                                                      | **默认屏幕方向：纵向**                                                                                                | **默认屏幕方向：横向**                                                                                                                  |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| **设备方向：自动旋转** | 应用程序屏幕以纵向加载，并可在纵向、横向向右和横向向左之间旋转（不包括纵向颠倒方向）。**注意**：在 iPad 上，应用程序屏幕根据设备方向以纵向或横向加载。屏幕可在纵向、纵向颠倒、横向向右和横向向左之间旋转。                                                                                                                                                                                                                           | 应用程序屏幕将加载并始终锁定为纵向。即使允许纵向颠倒，也不会旋转到该方向。**注意**：在 iPad 上，应用程序屏幕加载为纵向，并可在纵向和纵向颠倒方向之间旋转。如果设备方向在启动时为横向，则启动画面可以横向加载。 | 启动画面的加载方向与设备方向相同。应用屏幕在场景加载时以横向模式加载，并可以在横向向左和横向向右方向之间旋转。**注意**：在 iPad 上，应用程序屏幕加载为横向，并可在横向向左和横向向右之间旋转。如果设备方向在启动时为纵向，则启动画面可以纵向加载。 |
| **设备方向：纵向锁定** | 应用程序屏幕将加载并始终锁定为纵向。**注意**：在纵向时，如果将纵向的 [ScreenOrientation.AutoRotation](/engine/6000.0/script-reference/unity-engine/screen-orientation/auto-rotation.md) 属性设置为 false，则应用程序屏幕将旋转为横向。如果现在将横向的 [ScreenOrientation.AutoRotation](/engine/6000.0/script-reference/unity-engine/screen-orientation/auto-rotation.md) 属性设置为 false，则屏幕方向保持不变。 | 应用程序屏幕将加载并始终锁定为纵向。                                                                                           | 启动画面以纵向加载，但应用程序屏幕在加载场景时以横向加载。默认情况下，应用程序屏幕保持锁定在横向向左方向。**注意**：在 iPad 上，启动画面以纵向加载，场景以横向加载。应用程序屏幕保持锁定在横向。                          |
| **设备方向：横向锁定** | 不适用，因为 iPhone 没有横向锁定设置。如果用户在应用程序处于横向时关闭设备自动旋转设置，应用程序屏幕将旋转到纵向并保持锁定状态。**注意**：在 iPad 上，应用程序会加载并保持锁定在横向。                                                                                                                                                                                                                                 | 不适用，因为 iPhone 没有横向锁定设置。应用程序保持锁定在纵向。**注意**：在 iPad 上，启动画面以横向加载，场景以纵向加载。应用程序屏幕保持锁定在纵向方向。                        | 不适用，因为 iPhone 没有横向锁定设置。应用程序屏幕以横向加载，并且在应用程序加载时可以保持锁定在横向向左方向或横向向右方向。**注意**：在 iPad 上，应用程序屏幕以横向加载，并根据设备方向保持锁定在横向左侧或横向右侧。           |

## 确定设备世代##ipad-multitasking-modes

不同的设备世代具有不同的性能并支持不同的功能。使用 [iOS.DeviceGeneration](/engine/6000.0/script-reference/unity-engine-i-os/device-generation.md) 属性可查询设备的代际信息。

## 显示屏凹口##determining-device-generation

在某些显示屏上，某些区域可能由于其他硬件占用该空间而被遮挡或无法正常工作。使用 [Screen.cutouts](/engine/6000.0/script-reference/unity-engine/screen/cutouts.md) 可以返回每个凹口周围的边界盒列表。

iOS 设备不提供原生 API 来获取显示屏凹口信息，因此要在 Xcode 项目中针对每个可用的 iOS 设备为凹口进行硬编码。可以在 Unity Xcode 项目中的 `ReportSafeAreaChangeForView` 函数（位于 `UnityView.mm` 文件内）中修改现有数据或添加其他设备。

## 录制您的游戏回放##display-cutout

可以使用 [ReplayKit](/engine/6000.0/script-reference/unity-engine-apple-replay-kit/replay-kit.md) 录制游戏的音频和视频，以及从设备的麦克风和摄像机捕获的音频和视频评论。
