ar-vr-xr について
Unity XR、WebXR、ARKit、ARCore、Meta Quest、visionOSを対象としたAR・VR・XR開発ガイドです。SDKの例に加え、性能、快適性、操作性、アクセシビリティの指針をまとめています。
主な機能
- 01プラットフォームとSDKの概要
- 02Unity XRとWebXRの例
- 03RealityKitとVision Proの例
- 04パフォーマンス最適化の指針
- 05快適性とアクセシビリティの原則
活用シーン
- 01XRプロジェクトのプラットフォームと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 の配置: 適切な距離(1~3m)にワールドスペース UI を配置し、頭部に固定された HUD は避けます。
- パフォーマンス: フレームレートは妥協できません。徹底的に最適化します。
- アクセシビリティ: 座位モード、調整可能なスケール、色覚特性に配慮したオプションを用意します。
- 空間オーディオ: 没入感と道案内のために3Dオーディオ(HRTF、アンビソニックス)を使用します。
コメント
Markdown 対応