visionOS沉浸式空间中无法设置自定义相机的问题求助
解决visionOS沉浸式空间自定义相机不生效的问题
你的代码存在两个核心问题,导致自定义相机未被系统启用:
1. 未禁用默认头部追踪相机
在沉浸式空间场景中,RealityView默认使用头部追踪的系统相机,必须显式声明使用自定义相机。需要给RealityView添加cameraMode: .explicit参数,同时指定content.camera = cameraEntity,明确告诉系统启用我们创建的相机实体。
2. 相机定位逻辑可优化
look(at:from:relativeTo:)方法的坐标系逻辑容易产生预期外的结果,直接设置相机的transform.position再调用look(at:)调整朝向,逻辑会更清晰直观。
修改后的完整代码:
struct ImmersiveView: View { @Environment(AppModel.self) var appModel var body: some View { // 显式指定使用自定义相机,禁用默认头部追踪相机 RealityView(cameraMode: .explicit) { content in let cameraEntity = makeCamera() content.add(cameraEntity) // 设置当前活跃相机为自定义相机 content.camera = cameraEntity let boxEntity = makeBox() content.add(boxEntity) } } func makeCamera() -> Entity { let cameraEntity = Entity() // 直接设置相机位置在z轴2米处 cameraEntity.transform.position = SIMD3<Float>(0, 0, 2) // 让相机朝向(1,1,1)点 cameraEntity.look(at: SIMD3<Float>(1,1,1), relativeTo: nil) cameraEntity.components.set(PerspectiveCameraComponent()) return cameraEntity } func makeBox() -> ModelEntity { let size: Float = 0.3 let mesh = MeshResource.generateBox(width: size, height: size, depth: size) var material = UnlitMaterial(); material.color.tint = .red let boxEntity = ModelEntity(mesh: mesh, materials: [material]) boxEntity.transform.translation = [0, 0, -3] return boxEntity } }
额外提示
- 设置
cameraMode: .explicit后,系统会停止头部追踪,相机位置完全由代码控制。如果需要结合头部追踪功能,可以将自定义相机作为用户头部实体的子节点。 - 当前盒子位于z=-3位置,而相机在z=2且朝向(1,1,1),盒子可能不在相机视野内。可以临时将盒子位置改为
[1,1,1],快速验证自定义相机是否正常工作。
内容的提问来源于stack exchange,提问作者Reinhard Männer
相关产品推荐
相关产品推荐

