关于 ar-vr-xr
面向 AR、VR 和 XR 开发的技能指南,涵盖 Unity XR、WebXR、ARKit、ARCore、Meta Quest 与 visionOS。内容结合 SDK 示例及性能、舒适度、交互和无障碍设计建议。
主要功能
- 01平台与 SDK 概览
- 02Unity XR 和 WebXR 示例
- 03RealityKit 与 Vision Pro 示例
- 04性能优化建议
- 05舒适度与无障碍设计原则
适用场景
- 01为 XR 项目选择平台与 SDK
- 02规划舒适的空间交互
- 03优化移动 VR 或 PCVR 渲染
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ travisjneuman/ .claude --skill ar-vr-xr安装后在 Claude Code 中输入/ar-vr-xr确认已加载。
详细介绍
AR/VR/XR 开发
平台概览
| 平台 | SDK | 目标设备 |
|---|---|---|
| Unity XR | XR Interaction Toolkit | Quest、Vision Pro、PCVR、移动设备 |
| WebXR | Three.js、A-Frame、Babylon.js | 任何支持 WebXR 的浏览器 |
| ARKit | RealityKit、ARKit | iPhone、iPad、Vision Pro |
| ARCore | Sceneform、ARCore | Android 设备 |
| Meta Quest | Meta XR SDK | Quest 2/3/Pro |
| Apple Vision Pro | visionOS、RealityKit | Vision Pro |
Unity XR
// XR Interaction Toolkit setup
using UnityEngine.XR.Interaction.Toolkit;
public class GrabbableObject : XRGrabInteractable
{
protected override void OnSelectEntered(SelectEnterEventArgs args)
{
base.OnSelectEntered(args);
// Object grabbed
}
protected override void OnSelectExited(SelectExitEventArgs args)
{
base.OnSelectExited(args);
// Object released
}
}
Unity XR 最佳实践
- 目标帧率为 72-120 FPS(视平台而定)——掉帧会引起恶心
- 使用单通道实例化渲染实现立体效果
- 尽可能烘焙光照,将动态光源限制在 1-2 个
- 绘制调用:移动 VR 少于 100 次,PCVR 少于 500 次
- 积极使用 LOD 组——用户在 VR 中看不到远处的细节
WebXR
// Three.js WebXR
import * as THREE from 'three';
import { VRButton } from 'three/addons/webxr/VRButton.js';
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.xr.enabled = true;
document.body.appendChild(VRButton.createButton(renderer));
renderer.setAnimationLoop((time, frame) => {
if (frame) {
const session = renderer.xr.getSession();
const inputSources = session.inputSources;
// Handle controller input
}
renderer.render(scene, camera);
});
Apple Vision Pro(visionOS)
import SwiftUI
import RealityKit
struct ImmersiveView: View {
var body: some View {
RealityView { content in
let sphere = MeshResource.generateSphere(radius: 0.1)
let material = SimpleMaterial(color: .blue, isMetallic: true)
let entity = ModelEntity(mesh: sphere, materials: [material])
entity.position = [0, 1.5, -1]
content.add(entity)
}
.gesture(TapGesture().targetedToAnyEntity().onEnded { event in
// Handle tap on entity
})
}
}
XR 设计原则
- 舒适度: 避免人工移动,使用传送或房间尺度移动
- 交互: 优先采用直接操控(抓取、指向),而非抽象 UI
- UI 放置: 将世界空间 UI 放在舒适距离(1-3 m),避免头部锁定的 HUD
- 性能: 帧率不容妥协——全力优化
- 无障碍: 提供坐姿模式、可调节缩放和色盲选项
- 空间音频: 使用 3D 音频增强沉浸感和寻路体验(HRTF、ambisonics)
评论
支持 Markdown