Loading...
Loading...
Imports and configures TextMesh Pro Essential Resources for Unity projects targeting Meta Quest and Horizon OS. Use when setting up TMP UI, fixing missing TMP materials or fonts, or resolving pink/magenta TMP text.
npx skill4agent add meta-quest/agentic-tools hz-unity-tmp-resourcesLiberationSans SDFTMP SettingsAssets/TextMesh Pro/Resources/Unity_RunCommandusing 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);
}
}
}Unity_RunCommandusing 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.");
}
}Unity_RunCommandusing 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.");
}
}Unity_RunCommandusing 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);
}
}Window/TextMeshPro/Import TMP Essential ResourcesUnity_RunCommandusing 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);
}
}