Unity(iOS)中Google Cardboard相机禁止随头部旋转实现方法咨询
实现Unity Google Cardboard相机固定不随头部转动的方法
我之前做VR展示项目时刚好碰到过这个需求,给你两个实用的解决方案,根据你的SDK版本选就行:
方案1:直接禁用头部跟踪组件(推荐,最简洁)
如果你用的是Google VR SDK(旧版):
- 在场景里找到
CardboardMain对象,展开它的子物体Head - 找到
GvrHead组件,取消勾选Track Rotation(如果不需要固定位置,只关旋转就行) - 这样相机就会牢牢固定在初始角度,完全不响应头部转动
如果是用Unity XR Plugin + Google Cardboard(新版):
- 选中你的XR Camera对象,找到
XR Origin组件(或者它的子物体Camera Offset) - 找到
Tracked Pose Driver组件,把Pose Source里的Rotation设置为None,或者直接禁用该组件的旋转跟踪 - 也可以在Input System里禁用头部旋转的输入映射,但直接改组件设置更直观
方案2:用代码强制锁定相机旋转(灵活,适合动态切换场景)
如果需要在运行时动态开启/关闭头部跟踪,或者SDK组件不好直接修改,就用脚本强制固定旋转:
创建一个C#脚本,挂在相机(或相机父物体)上:
using UnityEngine; public class LockCameraRotation : MonoBehaviour { // 存储相机初始旋转角度 private Quaternion initialRotation; // 控制是否锁定旋转的开关 public bool isRotationLocked = true; void Start() { // 记录相机启动时的初始旋转 initialRotation = transform.rotation; } void Update() { if (isRotationLocked) { // 强制把旋转拉回初始值,忽略头部跟踪的影响 transform.rotation = initialRotation; // 如果需要固定到某个特定角度(比如正前方),也可以直接写: // transform.rotation = Quaternion.Euler(0, 0, 0); } } }
- 这个脚本会在每一帧重置相机旋转,不管用户怎么转头,相机都纹丝不动
- 要是需要临时解锁,直接在Inspector里把
isRotationLocked改成false,或者在其他脚本里动态修改这个变量就行
小提醒
- 如果场景里有左右眼两个相机,记得给两个相机都应用同样的设置,不然会出现左右画面错位的问题
- 部分Cardboard SDK版本会强制开启头部跟踪,这种情况下方案2的代码方法会更可靠
内容的提问来源于stack exchange,提问作者baseballboyg




