hz-android-2d-porting
Guides porting existing Android 2D apps to Meta VR and Horizon OS — input adaptation, panel layout, and design requirements. Use…
Ensures complete FBX URLs or absolute paths are used when importing external 3D models into Unity projects targeting Meta VR and Horizon OS. Use when adding FBX files, 3D models, or external assets.
Claude Code
$ npx -y skills add meta-quest/agentic-tools --skill hz-unity-fbx-import --agent claude-code
Codex
$ npx skills add meta-quest/agentic-tools --skill hz-unity-fbx-import -a codex -y
Cursor
$ npx skills add meta-quest/agentic-tools --skill hz-unity-fbx-import -a cursor -y
Gemini CLI
$ npx skills add meta-quest/agentic-tools --skill hz-unity-fbx-import -a gemini-cli -y
GitHub Copilot
$ npx skills add meta-quest/agentic-tools --skill hz-unity-fbx-import -a github-copilot -y
OpenCode
$ npx skills add meta-quest/agentic-tools --skill hz-unity-fbx-import -a opencode -y
Windsurf
$ npx skills add meta-quest/agentic-tools --skill hz-unity-fbx-import -a windsurf -y
name: hz-unity-fbx-import license: Apache-2.0 description: Ensures complete FBX URLs or absolute paths are used when importing external 3D models into Unity projects targeting Meta VR and Horizon OS. Use when adding FBX files, 3D models, or external assets.
Importing an external 3D model fails most often for one reason: an incomplete source path. This skill ensures every FBX source is a **complete, fully-qualified URL or absolute filesystem path**, and walks the import through `unity-cli`.
Use this skill automatically whenever:
**ALWAYS use complete, fully-qualified URLs or absolute paths for FBX files.**
Never use relative paths, partial URLs, or assume path completion.
**`unity command import_asset` takes an absolute *filesystem* path — it does not download.** Verified: passing a URL fails with *"Source file 'https://…' does not exist."* So a remote model is always two steps: download to disk, then import the local file.
When a user requests to import a model, determine the source:
1. **Remote URL** (HTTP/HTTPS):
2. **Local file** (file system):
3. **ZIP archive**:
**CRITICAL**: For URLs with query parameters (like `?token=...&auth=...`), you MUST include the ENTIRE URL including all parameters. Query parameters often contain authentication tokens required for download.
Valid examples:
Invalid examples (never use these):
Skip this step for a local file. **Quote the URL** so the shell doesn't split on `&` in query parameters — the single most common cause of a truncated, failing download.
# macOS / Linux curl -fSL "https://example.com/models/office_chair.fbx" -o /tmp/office_chair.fbx # Windows (PowerShell) Invoke-WebRequest -Uri "https://example.com/models/office_chair.fbx" -OutFile "$env:TEMP\office_chair.fbx"
Confirm the file exists and is non-empty before importing. A truncated or HTML error page saved as `.fbx` imports as a broken asset rather than failing loudly.
For a `.zip`, extract it first and locate the `.fbx` inside; import that.
unity status --format json # look for state "ready" # Validate first — reports what would be imported, writes nothing unity command import_asset --source "C:/Users/name/Downloads/office_chair.fbx" \ --path "Assets/Models/office_chair.fbx" --dry_run true --format json # Then import for real unity command import_asset --source "C:/Users/name/Downloads/office_chair.fbx" \ --path "Assets/Models/office_chair.fbx" --format json
extension. The `Assets/` prefix is optional.
Connecting, `--project-path`, and Safe Mode recovery are in the **`unity-cli`** skill.
`import_asset` copies and imports the file at its authored scale. Unlike a one-shot "import at height H" tool, normalizing size is a separate step:
unity command set_import_settings --asset "Assets/Models/office_chair.fbx" \
--settings '{"globalScale": 0.46, "useFileScale": false}' --format jsonCompute `globalScale` as `targetHeight / currentHeight`. For a humanoid rig also set `animationType` to Humanoid. See **`hz-unity-meta-movement-sdk-retargeting`** for why an oversized rig causes skewing, and for the `ModelImporter` fields involved.
unity command instantiate_prefab --prefab "Assets/Models/office_chair.fbx" --name office_chair --format json unity command save_scene --format json
Then read the actual bounds — **never assume the model's size**. `bounds` is a computed property, so `get_component_properties` will not give it to you (a `MeshRenderer` read returns `m_Materials`, `m_CastShadows` and friends, no bounds). An imported FBX also puts its renderers on **children** of the instantiated root, so use `GetBounds.
Guides porting existing Android 2D apps to Meta VR and Horizon OS — input adaptation, panel layout, and design requirements. Use…
Upgrades Meta VR apps to newer Horizon OS SDK versions — migration guides, deprecated API replacements, changelog. Use when…
Guides design of comfortable, intuitive VR/MR experiences for Meta VR and Horizon OS — comfort guidelines, interaction patterns,…
Builds WebXR experiences for Meta VR and Horizon OS using the Immersive Web SDK (IWSDK) — ECS architecture, Three.js integration,…
Build multi-window Meta Horizon OS experiences with the MetaVrx Layout SDK in Jetpack Compose or React Native. Covers framework…
Builds app UI for Meta VR and Horizon OS with the MetaVrx UI Set, a Jetpack Compose component library and design system. Covers…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.