Unity开发Rotate Ball Pro陀螺仪控制迷宫初始姿态平衡问题求助
问题原因
你当前的代码直接使用设备原始加速度值映射迷宫旋转角度,没有校准启动时的初始加速度基准:只有手机与地面平行时,重力在加速度传感器的x、y轴分量为0,对应迷宫初始平衡;如果启动时手机处于其他角度,重力在对应轴的初始分量不为0,迷宫初始状态就会是倾斜的,必须保持固定姿势才能正常游玩。
修复方案
新增初始加速度基准校准逻辑,启动时记录当前设备的加速度作为基准值,后续每次计算旋转时先减去基准值,抵消初始姿势的影响,修改后的代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] public class NewMovementScript : MonoBehaviour { public float multiplier = 0; // 存储启动时的初始加速度基准 private Vector3 initialAcceleration; void Start() { Input.gyro.enabled = true; Screen.sleepTimeout = SleepTimeout.NeverSleep; // 启动时记录当前加速度作为基准 initialAcceleration = Input.acceleration; } void FixedUpdate() { // 减去初始基准,得到相对初始姿势的加速度偏移量 Vector3 relativeAccel = Input.acceleration - initialAcceleration; var dir = Vector3.zero; dir.x = relativeAccel.x * -1 * multiplier; dir.z = relativeAccel.y * multiplier; transform.eulerAngles = new Vector3(dir.z, 0f, dir.x); } }
优化建议
- 可以增加1~2秒的启动校准缓冲期,避免用户启动游戏时刚好在晃动手机,导致基准值不准
- 如果需要支持游玩中途重新校准,可以加一个校准按钮,点击时重新给
initialAcceleration赋值当前的Input.acceleration即可 - 可以增加旋转角度限制,避免玩家倾斜幅度过大导致迷宫旋转过度影响体验
内容的提问来源于stack exchange,提问作者Kamer32
相关产品推荐
相关产品推荐

