---
title: 利用陀螺仪传感器
slug: world-sdk-guide-ch/7q4pqrVasKlCiq0A-JSa6
docTags: 
createdAt: 2024-09-02T08:34:13.136Z
---

在创建ZEPETO世界时，您可以使用陀螺仪传感器根据设备的倾斜实现各种世界玩法创意。本指南将向您展示如何在ZEPETOScript中利用Input.gyro。

:::hint{type="info"}
**📘 陀螺仪**
[https://docs.unity3d.com/ScriptReference/Gyroscope.html](https://docs.unity3d.com/ScriptReference/Gyroscope.html)
:::



## 设置对象

1\) 添加层级 > \[+] > 3D对象 > 圆球对象到场景中。

2\) 将对象的名称更改为球，并添加一个Rigidbody组件。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-V_tjRc4HXXgvqc9HApHTU-20240904-102419.png)



## 编写脚本

1\) 添加 TypeScript 并将脚本重命名为 RollingBall。
编写如下所示的示例脚本。

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Input, SystemInfo, Vector3, Rigidbody } from 'UnityEngine';
import { Text } from 'UnityEngine.UI';
 
export default class RollingBall extends ZepetoScriptBehaviour {
 
    public debugText: Text;
    public velocityMultiplier: number = 100;
 
    private _rollingBall: Rigidbody;
 
 
    Start() {
 
        // 获取附加到与此脚本相同的 GameObject 的 Rigidbody 组件
        this._rollingBall = this.GetComponent<Rigidbody>();
 
        // 检查设备是否支持陀螺仪
        if (SystemInfo.supportsGyroscope) {
            // 启用陀螺仪
            Input.gyro.enabled = true;
        } else {
            // 如果不支持陀螺仪，则禁用脚本
            console.log("此设备不支持陀螺仪。");
            Input.gyro.enabled = false;
        }
    }
 
    Update() {
        // 检查输入设备的陀螺仪是否启用
        if (Input.gyro.enabled) {
     
            // 读取 x 和 z 轴的陀螺仪值
            // 四舍五入到小数点后一位以稳定 Ball 对象的移动
            let gyroValueX = Math.round(Input.gyro.gravity.x * 10) / 10;
            let gyroValueZ = Math.round(Input.gyro.gravity.y * 10) / 10;
     
            // 使用 gyroValueX 和 gyroValueZ 设置 Ball 的速度
            this._rollingBall.velocity = new Vector3(gyroValueX * this.velocityMultiplier, 0, gyroValueZ * this.velocityMultiplier);
     
            // 在屏幕上显示当前的陀螺仪值
            this.debugText.text = "Input.gyro.gravity : " + Input.gyro.gravity.ToString();
        }
    }
}
```



脚本描述

- 获取附加到球体对象的刚体组件。
- 将 `Input.gyro.gravity.x` 和 `Input.gyro.gravity.z` 的值四舍五入以获得 gyroValueX 和 gyroValueZ 值。
- 通过将 gyroValueX 和 gyroValueZ 值乘以 velocityMultiplier 赋值给球体对象的速度，`速度`.
- 该 `Input.gyro.gravity` 值通过文本 UI 显示在屏幕上。

:::hint{type="info"}
**📘 陀螺仪.gravity**
[https://docs.unity3d.com/ScriptReference/Gyroscope-gravity.html](https://docs.unity3d.com/ScriptReference/Gyroscope-gravity.html)
:::



2\) 将您编写的 RollingBall ZEPETOScript 添加到球体对象。
在层级窗口中，通过拖放将文本 UI 连接到 ZEPETOScript 检查器窗口中显示的属性。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-8ysTWIE43qlIF8v4uoc-F-20240904-102419.png)



## 在移动设备上测试

1\) 运行带有 QR 移动测试的示例世界。

2\) 球体对象根据设备倾斜移动。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-imdoIv81Rz-3ltAWP814w-20240904-102427.gif)



:::hint{type="danger"}
**❗️ 注意**
请注意，`Input.gyro` 仅在移动环境中有效。
:::



## 应用示例

您可以通过应用 Input.gyro 在 ZEPETO 世界中移动 ZEPETO 角色。

1\) 添加 TypeScript 并将脚本重命名为 GyroMovement。
编写如下示例脚本。

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Input, SystemInfo, Vector3 } from 'UnityEngine';
import { ZepetoCharacter, ZepetoPlayers, LocalPlayer } from 'ZEPETO.Character.Controller';

export default class GyroMovement extends ZepetoScriptBehaviour {

    private _localCharacter: ZepetoCharacter;

    Start() {

        // 添加本地玩家添加时的监听器
        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            this._localCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
        });

        // 检查设备是否支持陀螺仪
        if (SystemInfo.supportsGyroscope) {
            // 启用陀螺仪
            Input.gyro.enabled = true;
        }
        else {
            // 如果不支持陀螺仪，则禁用脚本
            console.log("此设备不支持陀螺仪。");
            Input.gyro.enabled = false;
        }
    }

    Update() {
        if (Input.gyro.enabled) {
            // 获取陀螺仪重力的 x 轴值\
            // 四舍五入到小数点后一位以稳定角色移动
            const gyroValue = Math.round(Input.gyro.gravity.x * 10) / 10;

            const direction = new Vector3(0, 0, -gyroValue);

            // 移动本地角色
            this._localCharacter.Move(direction);
        }
    }
}
```



脚本描述

- 当本地玩家被添加到场景时，接收一个ZEPETO角色实例。
- 四舍五入 `Input.gyro.gravity.x` 的值以获取gyroValue值。
- 通过将 `方向` 作为参数分配给 `Move()` 函数来移动ZEPETO角色在Z轴方向。

2\) 将一个GameObject添加到场景并重命名为GyroGravity。添加您创建的GyroMovement ZEPETOScript。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-74IJHaP7idj8ksq9R4HuP-20240904-102419.png)



3\) 当作为QR移动测试运行示例世界时，ZEPETO角色根据设备的倾斜移动。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-uFHS5kSA5kOn4yAFMvvXa-20240904-102427.gif)



:::hint{type="success"}
👍 **提示**

- 除了本示例中使用的 `Input.gyro.gravity` 外，您还可以使用各种 `Input.gyro` 函数。
- 您可以将其应用于各种想法。尝试在ZEPETO上发布一个有趣的世界！
:::

