Communitygithub.com

unity-technologies/localization

Richtet die Unity-Lokalisierung ein und konfiguriert sie, einschließlich Gebietsschemata, Zeichen-/Asset-Tabellen, CJK-Schriftartunterstützung und Addressables-Workflows. Verwenden Sie dies, wenn der Benutzer einem Projekt Sprachen hinzufügen, UI-Text übersetzen, asiatische (CJK) Sprachen mit TMP-Schriftarten unterstützen oder i18n, l10n, mehrsprachige Unterstützung oder die Unterstützung mehrerer Sprachen in einem Spiel erwähnen möchte.

Was ist localization?

Diese Fertigkeit (Skill) automatisiert die Einrichtung und Konfiguration der Unity-Lokalisierung und deckt dabei Gebietsschemata, Zeichen- und Asset-Tabellen, die Integration von Addressables und die Unterstützung asiatischer Schriften (CJK) ab. Sie ist für Entwickler gedacht, die Unity-Projekte mit mehreren Sprachen ausstatten möchten, und funktioniert auf allen Plattformen, die Unity unterstützt. Der Skill bietet ein umfassendes Skript, das die Installation des Lokalisierungspakets überprüft (durch Überprüfen der `packages-lock.json`), `LocalizationSettings` und Gebietsschemata erstellt oder findet und dann Zeichen- und Asset-Tabellen programmatisch mit übersetzten Inhalten und Schriftart-Assets befüllt. Er betont wichtige Muster wie die Verwendung von `Locale.Identifier.Code` zur Vermeidung von Datenfehlzuordnungen und die Benachrichtigung des Editors nach Änderungen mittels `EditorUtility.SetDirty`. Ein kritischer Abschnitt behandelt die robuste Bindung von UI-Elementen: Statt interner `internal`-APIs zu verwenden, setzt der Skill auf die öffentliche `LocalizeStringEvent`-Komponente, die explizit mit `OnUpdateString` verdrahtet wird. Für asiatische Schriftarten wird die zuverlässigere Methode des Font-Swappings über Asset-Tabellen empfohlen, anstatt auf fehleranfällige TMP-Fallback-Schriftarten zu setzen. Der Skill enthält außerdem eine detaillierte Anleitung zur Gebietsschemaumschaltung, die strikt zwischen der Editor-Vorschau (Localization Scene Controls) und der Laufzeitumgebung (Einstellung von `LocalizationSettings.SelectedLocale`) trennt. Er warnt ausdrücklich davor, den Umschaltzustand selbst zu verwalten, da dies zu Inkonsistenzen im gesamten Projekt führt.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/unity-technologies/skills/tree/main/skills/localization

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Dieser Leitfaden behandelt die Einrichtung und Konfiguration der Unity-Lokalisierung, einschließlich Gebietsschemata, Zeichen- und Asset-Tabellen, Addressables-Integration und CJK-Schriftartunterstützung über Asset-Tabellen.

0. Überprüfung der Paketinstallation

Bevor Sie irgendetwas anderes tun, überprüfen Sie, ob das Lokalisierungspaket installiert ist. Viele APIs in dieser Fertigkeit schlagen entweder stillschweigend fehl oder werfen verwirrende Fehler, wenn das Paket nicht vorhanden ist.

  1. Überprüfen Sie durch Lesen des Projekts, nicht durch Fragen des Paket-Managers. Suchen Sie nach com.unity.localization in Packages/packages-lock.json. Diese Datei zeichnet auf, was Unity tatsächlich aufgelöst hat, sie ist einfaches JSON, und zum Lesen wird weder der Editor noch ein asynchroner Aufruf benötigt. (Packages/manifest.json zeichnet nur auf, was angefordert wurde, also überprüfen Sie die Sperrdatei.)
  2. Installieren, falls fehlend: UnityEditor.PackageManager.Client.Add("com.unity.localization").
  3. Richtig warten. Client.Add und Client.List sind asynchron: Sie geben eine Anforderung zurück, die bei der Rückkehr des Aufrufs immer noch InProgress ist, daher sagt das Lesen des Ergebnisses in derselben Anweisung nichts aus. Warten Sie auch nicht mit einer IsCompleted-Busy-Schleife; das blockiert den Hauptthread, auf dem Sie ausgeführt werden. Starten Sie stattdessen die Installation, kehren Sie zurück und überprüfen Sie packages-lock.json in einem späteren Aufruf, bis die ID erscheint. Die Installation löst auch einen Domain-Neulad aus, daher wird die erste oder zweite Überprüfung wahrscheinlich fehlschlagen; eine frische Installation wird normalerweise in wenigen Sekunden abgeschlossen.
  4. Bestätigen Sie, dass die Typen tatsächlich geladen sind, bevor Sie sie verwenden, da die Sperrdatei geschrieben werden kann, bevor die Assemblies bereit sind:
    var t = System.Type.GetType(
        "UnityEngine.Localization.Settings.LocalizationSettings, Unity.Localization");
    return t != null ? "bereit" : "noch nicht geladen";
    
    Fahren Sie erst fort, wenn dies "bereit" zurückgibt.

1. Lokalisierungseinstellungen und Gebietsschemata

Wenn LocalizationEditorSettings.ActiveLocalizationSettings null ist, müssen Sie es finden oder erstellen:

  1. Finden: Verwenden Sie AssetDatabase.FindAssets("t:LocalizationSettings", new[] { "Assets" }). Wenn gefunden, laden Sie das erste und weisen Sie es LocalizationEditorSettings.ActiveLocalizationSettings zu.
    • Übergeben Sie immer die Suchordner. Eine unbegrenzte FindAssets-Suche durchsucht das gesamte Projekt einschließlich schreibgeschützter Pakete, sodass sie ein Asset aus einem Paket zurückgeben kann und Sie das Projekt auf etwas verweisen, das Sie nicht bearbeiten können. Dies gilt für jeden FindAssets-Aufruf in dieser Fertigkeit.
  2. Erstellen: Wenn nicht gefunden, erstellen Sie eine neue Instanz und speichern Sie sie unter Assets/Localization/LocalizationSettings.asset. Verwenden Sie ScriptableObject.CreateInstance<LocalizationSettings>() gefolgt von AssetDatabase.CreateAsset().
  3. Aktivieren: Setzen Sie LocalizationEditorSettings.ActiveLocalizationSettings = settings.
  4. Gebietsschemata: Stellen Sie sicher, dass Gebietsschemata (en, fr, de, usw.) vorhanden sind. Erstellen Sie sie, falls sie fehlen, und fügen Sie sie mit LocalizationEditorSettings.AddLocale(locale) zu den Einstellungen hinzu.

2. Ändern von Lokalisierungstabellen

Programmatische Änderungen an Zeichen- oder Asset-Tabellen erfordern eine Benachrichtigung des Editors. Erstellen Sie immer die erforderlichen Asset-Tabellen, es sei denn, es ist bereits eine vorhanden.

Sicheres Befüllungsmuster

Wenn Sie Tabellen aus einem Datensatz befüllen, gleichen Sie explizit mit Locale.Identifier.Code ab. Die Reihenfolge von GetLocales() ist nicht garantiert, dass sie mit Ihrem Eingabedatenarray übereinstimmt – die Annahme, dass dies der Fall ist, führt zu stillen Datenfehlzuordnungen, die nur sehr schwer zu debuggen sind. Verwenden Sie für Asset-Tabellen die GUID des Assets: table.GetEntry(sharedId) ?? table.AddEntry(sharedId, guid);.

Aktualisierung & Benachrichtigung

Nach jeder Änderung (Hinzufügen von Schlüsseln, Aktualisieren von Werten) benachrichtigen Sie den Editor, damit er seinen internen Zustand aktualisieren kann. Das Überspringen dieses Schritts führt dazu, dass der Editor bis zum nächsten Reimport veraltete Daten anzeigt.

  1. Rufen Sie EditorUtility.SetDirty(collection), EditorUtility.SetDirty(collection.SharedData) für jede geänderte Table auf.
  2. Unity 6+ Benachrichtigung: LocalizationEditorSettings.EditorEvents.RaiseCollectionModified(sender, collection);
  3. Rufen Sie am Ende immer AssetDatabase.SaveAssets() auf.

3. UI-Lokalisierung und Layout

Namensräume & Konflikte

  • Qualifizieren Sie Namen immer: Verwenden Sie UnityEngine.UI.Image, UnityEngine.UI.VerticalLayoutGroup, UnityEngine.UI.ScrollRect, UnityEngine.UI.Mask, UnityEngine.UI.CanvasScaler, UnityEngine.UI.GraphicRaycaster, UnityEngine.UI.ContentSizeFitter, UnityEngine.UI.LayoutRebuilder usw.
  • UnityEngine.UI ist sowohl ein Namensraum als auch ein Klassencontainer, daher erzeugen unqualifizierte Namen CS0118 (Namensraum wie ein Typ verwendet). Die vollständige Qualifizierung vermeidet dies vollständig.
  • Einzelne Instanz: Überprüfen Sie immer mit GameObject.Find("YourCanvasName") und zerstören Sie das alte, bevor Sie ein neues erstellen.
  • Gebietsschema-Umschaltung: Verwenden Sie das Paket und trennen Sie Vorschau und Laufzeit. Dies sind zwei unterschiedliche Mechanismen, und ihre Vermischung ist der Grund, warum die Gebietsschema-Umschaltung oft selbst gestrickt wird.
    • Um ein Gebietsschema während der Erstellung in der Vorschau anzuzeigen, verwenden Sie das Localization Scene Controls-Fenster (Window > Asset Management > Localization Scene Controls). Dies ist nur für den Editor. Es ist kein Laufzeitfeature, daher ist es nicht die Antwort, wenn das Spiel selbst eine Spracheinstellung benötigt.
    • Um das Gebietsschema zur Laufzeit zu wechseln, weisen Sie LocalizationSettings.SelectedLocale zu. Das ist der unterstützte Einstiegspunkt, und alles, was über LocalizeStringEvent gebunden ist, wird davon aktualisiert.
    • Um festzulegen, mit welchem Gebietsschema das Spiel startet, konfigurieren Sie einen Start-Gebietsschema-Selektor auf dem Lokalisierungseinstellungs-Asset. SpecificLocaleSelector ist derjenige, der ein gewähltes Gebietsschema erzwingt; die Standardkette übernimmt ansonsten die Systemsprache.
    • Verwalten Sie NIEMALS den Gebietschema-Zustand selbst. Ein echtes Sprachmenü im Spiel ist in Ordnung und wird erwartet, solange es SelectedLocale setzt und das Paket die Änderung propagieren lässt. Was verboten ist, ist ein Debug-Dropdown oder -Menü, das eine eigene Variable für die "aktuelle Sprache" führt, Zeichenfolgen selbst austauscht oder das Paket umgeht, weil ihm sonst nichts anderes im Projekt folgt.

Lokalisierte Zeichenfolgen-Ereignisse (Robuste Bindung)

  • Komponententyp prüfen: Identifizieren Sie, ob das Ziel TextMeshPro oder das alte UnityEngine.UI.Text ist.

  • Richtig binden: Fügen Sie die öffentliche UnityEngine.Localization.Components.LocalizeStringEvent Komponente hinzu und verdrahten Sie sie selbst – setzen Sie StringReference auf den Tabelleneintrag und fügen Sie dann einen OnUpdateString-Listener hinzu, der den Wert an die Textkomponente zuweist (TMP_Text.text für TextMeshPro, UnityEngine.UI.Text.text für das alte Text).

    Verwenden Sie nicht UnityEditor.Localization.Plugins.TMPro.LocalizeComponent_TMPro oder dessen UGUI-Gegenstück per Reflection. Diese sind internal (gemessen in Lokalisierung 1.5.12), sodass der Zugriff auf sie bedeutet, die Zugriffskontrolle zu umgehen, um eine API zu erreichen, für die Unity keine Stabilitätszusicherung macht – sie kann sich in jeder Paketversion ändern oder verschwinden. LocalizeStringEvent ist öffentlich und erledigt dieselbe Aufgabe mit expliziter Verdrahtung.

  • Layout-Neuaufbau: Rufen Sie nach dem Setzen von lokalisiertem Text oder dem Befüllen einer Liste UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(parentTransform) auf, um sicherzustellen, dass die Abmessungen aktualisiert werden.

4. Asiatische Schriftartunterstützung (CJK)

Vermeiden Sie TMP-Fallback-Schriftarten für CJK-Gebietsschemata. Verwenden Sie stattdessen Asset-Tabellen-Schriftartaustausch für jedes spezifische Gebietsschema – Fallbacks sind unzuverlässig und schwer zu debuggen, wenn Glyphen fehlen.

Voraussetzung: TMP Essential Resources müssen importiert sein

Überprüfen Sie dies, bevor Sie eine TMP-API verwenden. In einem Projekt, das sie nie importiert hat, ist TMP_Settings.instance null und TMP-Aufrufe schlagen mit einer bloßen NullReferenceException fehl, die nichts Nützliches benennt. TMP_FontAsset.CreateFontAsset ist eine davon, daher schlägt die Schrifterstellung in der ersten Zeile mit einem Fehler fehl.

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

unity-technologies/2d-pixel-perfect

Sets up, diagnoses, and fixes pixel perfect 2D rendering in Unity projects. Use when working on any retro-style or pixel art 2D game.

unity-technologies/audio-setup-mixers

Scans the scene and audio assets to appropriately route Audio Sources into existing Audio Mixer Groups, classifying each source by what it plays. Use when the user asks about cleaning up mixer assignments, routing audio through a mixer, or which group a sound belongs in. Creating mixers and groups, and setting volumes, are not automated — the skill inventories what exists and asks the user to add anything missing.

unity-technologies/build-live-game

Build and operate a live game using Unity Services. Use when the user needs to implement, connect, or debug backend-driven features — battle passes, achievements, player progression, cloud saves, leaderboards, matchmaking, virtual economies, server-authoritative logic, anti-cheat, player accounts and authentication, remote configuration, feature flags, A/B testing, analytics, or cloud resource deployment. Triggers on live-ops, live service, backend, server authority, cloud code, cloud save, remote config, player data, retention, monetization loop, season pass, ranking, multiplayer sessions, lobbies, or any Unity Services integration.

unity-technologies/generate-editor-search-query

Generates Unity Search / Quick Search queries and opens the Unity Search window for read-only Unity Editor asset or scene-object lookup requests. Always use when the user asks to find, search, show, locate, filter, look up, query, or list concrete assets or scene objects in the current project or scene, even if Unity Search is not named. Covers materials, textures, prefabs, scenes, scripts, shaders, GameObjects, components, Lights, Cameras, UI objects, labels, paths, references, selected or named assets, and asset types. Also use when the user explicitly mentions Unity Search, Quick Search, Search window, open Search, or asks what Unity Search query to use. Do not use for general project overview, project structure, folder-purpose summaries, gameplay/system explanations, how-to programming questions, web search, repository text search, build logs, package installation, menu or settings search, modifying results, or non-Unity filesystem search unless the user explicitly asks to use Unity Search.

unity-technologies/implement-in-app-purchases

Implement, configure, and debug Unity In-App Purchases (IAP) — store connection, product catalog, consumable/non-consumable/subscription purchases, two-step pending-confirm flow, receipt validation, entitlement checking, restore transactions, Apple extensions (promotional purchases, Ask-to-Buy, code redemption), and Google Play extensions (subscription upgrade/downgrade), D2C Capabilities(direct to customer), 3rd party payment provider (Stripe/Coda) via Unity IAP/Unity Cloud. Use when the user needs to add, modify, debug, or migrate from native Android/iOS billing, 3rd party packages(RevenueCat/Adapty/Essential Kit/Unipay supported) to IAP. Triggers on microtransactions (MTX), monetization, real-money purchases, store purchases, buying items, support D2C, purchase via Stripe/Coda, migrate from native billing(Google's BillingClient or Apple's StoreKit/SKPaymentQueue/SKProduct)/RevenueCat/Adapty/EssentialKit/Unipay.

unity-technologies/initialize-ai-navigation

Sets up and configures the Unity AI Navigation system — NavMesh surfaces, NavMesh agents, obstacles, links, modifiers, areas and costs. Use when creating walkable navigation meshes, adding pathfinding agents, setting up patrol routes, configuring obstacle avoidance and carving, connecting separate NavMeshes with links, coupling navigation with animation, or troubleshooting navigation issues.

unity-technologies/levelplay-unity-integration

Integrates the LevelPlay Mediation SDK via the Ads Mediation UPM package. Use when a developer asks about adding ads to a Unity game, implementing rewarded, interstitial, or banner ads, setting up ad mediation, configuring ad networks, installing or updating the Ads Mediation package, troubleshooting LevelPlay namespace errors, resolving Android gradle or iOS CocoaPods dependency issues for ads, configuring ATT or privacy settings for ad compliance, tracking impression-level revenue (ILRD), initializing the LevelPlay SDK, or setting up ad unit IDs. Also use when a developer wants to monetize their Unity game with ads, asks how to get started with LevelPlay, ads, or mediation, or needs help with any part of the LevelPlay integration workflow including platform-specific setup for iOS or Android. Also use when upgrading the LevelPlay or IronSource SDK version, migrating from deprecated IronSource.Agent APIs, or migrating a game from Unity Ads to LevelPlay.

unity-technologies/manage-sprite-atlas

Manage SpriteAtlas using prebuild pipeline with IPreprocessBuildWithReport (DEFAULT approach). Use it to configure master atlases, variant atlases, texture settings, packing settings, and platform-specific configurations. Use when the user asks about creating sprite atlases, optimizing sprites, configuring atlas settings, adding sprites to atlases, creating variant atlases, implementing automated atlas generation, or runtime sprite atlas access. Always use prebuild approach unless user explicitly requests manual authoring.

unity-technologies/migrate-birp-to-urp

Plans, executes, and troubleshoots Unity projects moving from the Built-in Render Pipeline (BiRP/BIRP/Built-in RP) to the Universal Render Pipeline (URP). Use when the user asks to upgrade, convert, switch, or migrate a project, scene, material, or shader to URP/Universal Render Pipeline; fix pink or magenta materials after URP; convert Built-in materials/shaders; move a 2D project to URP 2D; review lighting, quality, post-processing, baked lightmaps, or reflection probes after URP; or diagnose visual problems after a render-pipeline migration.

Verwandte Skills