From meta-vr
Imports and configures TextMesh Pro Essential Resources for Unity projects targeting Meta Quest and Horizon OS. Handles missing TMP materials, fonts, and pink/magenta text.
How this skill is triggered — by the user, by Claude, or both
Slash command
/meta-vr:hz-unity-tmp-resourcesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill automatically when any of the following are detected:
Use this skill automatically when any of the following are detected:
LiberationSans SDF, TMP Settings, or missing TMP materialsAssets/TextMesh Pro/Resources/ folder does not existBefore importing, check whether resources already exist using Unity_RunCommand:
using UnityEngine;
using UnityEditor;
using System.IO;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
string resourcesPath = Path.Combine(Application.dataPath, "TextMesh Pro", "Resources");
bool imported = Directory.Exists(resourcesPath);
if (imported)
{
string fontPath = "Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset";
var font = AssetDatabase.LoadAssetAtPath<Object>(fontPath);
result.Log("TMP Essential Resources: ALREADY IMPORTED. Default font present: {0}", font != null);
}
else
{
result.Log("TMP Essential Resources: NOT IMPORTED. Resources folder missing at {0}", resourcesPath);
}
}
}
If already imported, stop here — no action needed.
IMPORTANT: The TMP import process opens a Unity dialog that requires manual user interaction. This cannot be fully automated via MCP.
Use Unity_RunCommand to trigger the import dialog:
using UnityEngine;
using UnityEditor;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
EditorApplication.ExecuteMenuItem("Window/TextMeshPro/Import TMP Essential Resources");
result.Log("TMP Essential Resources import dialog opened. User must click Import in the Unity Editor.");
}
}
After executing, you MUST:
After the user confirms, verify with Unity_RunCommand:
using UnityEngine;
using UnityEditor;
using System.IO;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
string resourcesPath = Path.Combine(Application.dataPath, "TextMesh Pro", "Resources");
if (!Directory.Exists(resourcesPath))
{
result.LogError("Import failed: Resources folder not found at " + resourcesPath);
return;
}
string fontPath = "Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset";
var font = AssetDatabase.LoadAssetAtPath<Object>(fontPath);
if (font == null)
{
result.LogError("Import incomplete: Default font asset not found at " + fontPath);
return;
}
var settingsGuids = AssetDatabase.FindAssets("t:TMP_Settings");
if (settingsGuids.Length == 0)
{
result.LogError("Import incomplete: TMP_Settings asset not found.");
return;
}
result.Log("TMP Essential Resources verified: folder exists, default font present, TMP_Settings found.");
}
}
If text still appears pink after importing resources, force a shader recompilation via Unity_RunCommand:
using UnityEngine;
using UnityEditor;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
var shaderGuids = AssetDatabase.FindAssets("t:Shader TextMeshPro");
int reimported = 0;
foreach (var guid in shaderGuids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
reimported++;
}
result.Log("Reimported {0} TMP shaders.", reimported);
}
}
If Window/TextMeshPro/Import TMP Essential Resources is not available:
Unity_RunCommand:using UnityEngine;
using UnityEditor;
using UnityEditor.PackageManager;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
var request = Client.Add("com.unity.textmeshpro");
// Busy-wait is required here because Unity_RunCommand scripts run synchronously.
// This will briefly block the editor (typically < 5 seconds).
while (!request.IsCompleted) { }
if (request.Status == StatusCode.Success)
result.Log("TextMesh Pro package installed: {0}", request.Result.version);
else
result.LogError("Failed to install TMP: " + request.Error.message);
}
}
This skill handles importing TMP resources. For VR-specific UI configuration (canvas setup, text sizing, viewing distances), use the meta-quest-ui skill after TMP resources are imported.
npx claudepluginhub meta-quest/agentic-tools --plugin meta-vrConfigures Unity world-space canvases, TextMesh Pro text, and interactive UI (buttons, sliders) for Meta Quest and Horizon OS VR development.
Controls the Unity Editor from the terminal via the `ucp` CLI. Automates scenes, GameObjects, assets, builds, tests, packages, and profiling over a WebSocket/JSON-RPC bridge.
Unity 6 UI development guide. Use when building user interfaces, menus, HUD, buttons, or any UI elements. Covers UI Toolkit (recommended for new projects — USS, UXML, UI Builder, data binding), uGUI/Canvas (legacy runtime UI), and IMGUI. Based on Unity 6.3 LTS documentation.