利用陀螺仪传感器
8 分
在创建ZEPETO世界时,您可以使用陀螺仪传感器根据设备的倾斜实现各种世界玩法创意。本指南将向您展示如何在ZEPETOScript中利用Input.gyro。
设置对象
1) 添加层级 > [+] > 3D对象 > 圆球对象到场景中。
2) 将对象的名称更改为球,并添加一个Rigidbody组件。

编写脚本
1) 添加 TypeScript 并将脚本重命名为 RollingBall。 编写如下所示的示例脚本。
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 显示在屏幕上。
2) 将您编写的 RollingBall ZEPETOScript 添加到球体对象。 在层级窗口中,通过拖放将文本 UI 连接到 ZEPETOScript 检查器窗口中显示的属性。

在移动设备上测试
1) 运行带有 QR 移动测试的示例世界。
2) 球体对象根据设备倾斜移动。

❗️ 注意 请注意,Input.gyro 仅在移动环境中有效。
应用示例
您可以通过应用 Input.gyro 在 ZEPETO 世界中移动 ZEPETO 角色。
1) 添加 TypeScript 并将脚本重命名为 GyroMovement。 编写如下示例脚本。
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。

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

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