On-Device-AI-Roguelike in Unity auf Android

Stellt euch vor: Ein Roguelike-RPG, wo das Gehirn eures Handys – nicht irgendein ferner Server – tödliche Etagen auf die Schnelle erfindet. Ein Entwickler packt Phi-4-mini in Unity und liefert in 8:43 Minuten goldenes JSON auf dem Galaxy S24 Ultra.

8:43 bis AI-generierte Dungeons aufs Handy: Mein On-Device-Roguelike-Experiment — theAIcatchup

Key Takeaways

  • Phi-4-mini rockt Unity-Roguelikes auf Android, spuckt gültige JSON-Dungeons in ~9 Minuten auf S24 Ultra.
  • NPU-Beschleunigung enttäuscht derzeit (QNN-Lib-Fehler), CPU-Basis läuft – deutet auf explosives Potenzial.
  • Wichtige Hacks: Eigener Tokenizer, adb-Modell-Deploy, SDK 31 für Vendor-Libs – Blaupause für On-Device-AI-Games.

8 Minuten. 43 Sekunden. So lange braucht ein Samsung Galaxy S24 Ultra, um einen Dungeon voller JSON zu spucken – Etagen, Mobs, HP, Angriffe – direkt aus einem lokalen LLM.

Stellt euch eure Taschenrakete vor, diesen glatten Snapdragon-Klotz, der 150 Token Roguelike-Wahnsinn durchrechnet, ohne die Cloud anzurufen. Keine Latenzprobleme. Keine Konzern-Datensammler. Nur pure, lokale KI-Magie treibt ein Unity-RPG an. Gemeint ist Phi-4-mini, Microsofts 3,8-Milliarden-Biest, gequetscht in die Android-Spielschleife.

Und der Hammer: Es funktioniert wirklich. Gültiges JSON. Koreanische Mob-Namen inklusive (Prompt-Fehler, na und?).

Warum ein Sprachmodell in ein Roguelike quetschen?

Roguelikes leben von prozeduralem Chaos – endlose Durchläufe, brutale Zufälle. Aber was, wenn das Chaos schlau wird? Ein LLM flüstert Feindpositionen, Boss-Stats, sogar Flavor-Text, alles auf euren Run zugeschnitten. Lokal heißt: Blitzschnell, privat, euer Eigentum. Keine API-Keys, die betteln.

Der Entwickler geht aufs Ganze. Phi-4-mini wählt er, weil Microsofts ONNX-Paket plug-and-play ist – 4,9 GByte quantisiert, passt perfekt in 12 GByte RAM. Kleinere Modelle? Die verpatzen JSON-Formatierung, kotzen Arrays statt Müll.

“[LLM] Generiert in 181,4s (150 Token max) JSON kam raus: [ {“floor”:1,”mob”:”게으른 빵집 아들”,”hp”:50,”atk”:10}, {“floor”:4,”mob”:”elite”,”hp”:100,”atk”:20}, {“floor”:5,”mob”:”boss”,”hp”:200,”atk”:40} ]”

Peng. Strukturierte Ausgabe. Auch wenn Mob-Namen an die des Spielers erinnern (später fixen, Kumpel).

ONNX Runtime? Cross-Platform-Göttergabe. Unity-C#-Bindings über asus4s Paket. Acceleratoren umschalten – QNN für Snapdragon-NPU, NNAPI, CoreML – mit einer Codezeile. Unity? 2D-Roguelike-Paradies, Android/iOS-Builds, C# überall. Kein Python-Schiss.

Min SDK 31 macht’s wasserdicht – Android 12 schaltet Vendor-Libs für QNNs libcdsprpc.so frei. Tiefer runter? NPU ade.

Schafft euer Flaggschiff-Handy ein 3,8-Milliarden-Modell im Spiel?

Kurz: Knapp. S24 Ultras Snapdragon 8 Gen 3 prunkt mit Hexagon-NPU, 12 GByte RAM. Entwickler schiebt das 4,9-GByte-Modell per adb rein (94 Sekunden, geil). APK bleibt schlank.

Aber Zahlen? Mac-Editor (CPU): 246s, 0,45 Tok/s. S24 CPU-only: 523s, 0,21 Tok/s. QNN HTP? 490s, 0,31 Tok/s. Handy 2,1x langsamer als Mac. NPU? Peanuts-Boost.

Logs petzen: “Failed in loading stub: dlopen failed: library ‘libcdsprpc.so’ not found.” QNN meldet sich, Backend versagt. NPU-Versprechen, CPU-Lieferung.

Mein heißer Take – ungeschminkt, originell: Das erinnert an iPhone 2007. GPUs waren Spielzeug; Jobs’ Metal-API zündete Mobile-Gaming-Explosion (Angry Birds, Infinity Blade). NPUs stehen jetzt da. Klobig, halbgare, aber gebt Entwicklern sechs Monate? On-Device-AI-Spiele werden vom Gimmick zum Genre. Stellt euch No Mans Sky prozedurale Galaxien vor, aber pro Gerät, pro Run, LLM-gesteuert. Cloud? Für Indies überholt.

Die blutigen Build-Probleme – und Fixes, die gerettet haben

Dev-Leben: 90% Dämonen zähmen.

Tokenizer? Kein C#-tiktoken für Phi. Eigener aus tokenizer.json gebaut – 200k Vokabeln, Merges als Arrays (nicht Strings, Ups), GPT-2-Byte-Tricks, BPE-Cache.

KV-Cache-Decoding: 32 Layer, 8 Köpfe, 128 Head-Size. Prefill-Prompt, Token decodieren. Tensoren meutern – DenseTensor-Ctor-Args vertauscht.

model.onnx-Pfad? ../../.. wird ../..

CompressReleaseAssets? 5 GByte StreamingAssets zertrümmern Javas 2,1-GByte-Array. Gradle-Cache (15 GByte!) gelöscht, Modell aus Assets verbannt. adb push in App-Dateien.

Fonts? TMPs LiberationSans ignoriert Koreanisch. AppleSDGothicNeo.ttc konvertiert – Custom Range: 32-126,44032-55203,12593-12686 (dezimales Hangul-Hölle).

Newtonsoft.Json-Cast? JValue zu JArray floppt – Merges waren Arrays, keine Strings.

Alles klickt. Dungeon-JSON fließt.

Warum zählt On-Device-AI für Game-Devs?

Energiewelle hier. Plattformwechsel – AI als neue OS-Schicht. Heut Unity-Plugins, morgen NPU-Hooks in jedem Engine. Handys packen 40+ TOPS NPUs; Desktops hinken.

Konzerngequatsche? Qualcomm pumpt Hexag

Priya Sundaram
Written by

Hardware and infrastructure reporter. Tracks GPU wars, chip design, and the compute economy.

Worth sharing?

Get the best AI stories of the week in your inbox — no noise, no spam.

Originally reported by dev.to