Unity durchsuchen

Was Sie in Unity NICHT tun sollten: Häufige Fehler vermeiden

Last updated: December 2018

What you’ll get from this page: A guide that you will want to reference throughout your development. Follow these great tips from Unity field engineer Valentin Simonov that will help you set up a smart and efficient development pipeline, and ultimately ship better and more performant content.

Planung

The most important part of any software development project because decisions made in the this phase will be difficult to change later on in the development cycle.

Zu wenig Forschung vor dem Start des Projekts

  • Überprüfen Sie, ob alle geplanten Funktionen tatsächlich auf allen Zielplattformen funktionieren.

The minimally supported devices for your project aren’t specified

  • Define the minimally supported device(s) for your content.
  • Halten Sie diese Geräte für Ihre Entwickler- und QA-Teams bereit
  • So können Sie eine realistische Performance- und Frame-Planung festlegen.

Frame- und Asset-Planungen werden nicht frühzeitig festgelegt

  • Definieren Sie Zielvorgaben für:
    • Modelle – wie viele Vertices kann das Zielgerät rendern?
    • Assets – wie detailliert sollen Modelle und Texturen sein?
    • Scripts und Rendering – wie viel % des Frames sind für Logik, Rendering, Effekte und andere Subsysteme eingeplant?

Mehr Tipps:

Die Grafik-Performance optimieren

Charaktermodellierung für optimierte Performance

Szenen- und Prefab-Unterteilung werden nicht frühzeitig festgelegt.

... oder (in anderen Worten) alle arbeiten in der gleichen Szene.

  • Unterteilen Sie Level in (zusätzlich geladene) Szenen.
  • Verschieben Sie Objekte in Prefabs und bearbeiten Sie sie in separaten Szenen.
  • Einigen Sie sich auf den hauptsächlichen Szenen-Sperrmechanismus.

Der Asset-Pipelineprozess ist schlecht geplant

Bei diesem Prozess geht es darum, Assets nach den Spezifikationen der Grafiker in das Projekt zu bringen.

  • Beziehen Sie nach Möglichkeit von Anfang an einen Technical Artist ein, um diesen Prozess zu definieren.
  • Definieren Sie klare Richtlinien für Asset-Formate und Spezifikationen.
  • Fügen Sie Importzeit-Tests hinzu.

Mehr Tipps:

Grafik-Assets: Beste Vorgehensweisen

Unity Asset importing

Sie haben keinen Build- und QA-Prozess festgelegt

  • Set up a build machine, or, turn on and set up Unity Teams.
  • Wie soll eine Funktion zum Release-Build veröffentlicht werden?
  • Wie werden neue Builds getestet?
  • Sind die Tests automatisiert?
  • Werden Statistiken aufgezeichnet?

Unity setup Cloud Build

Das Projekt wird nach den ersten Prototypen nicht von vorne begonnen

After building a prototype and getting it approved by the management, strongly consider starting it from scratch.

  • Entscheidungen während der Prototyping-Phase werden meist zugunsten der Schnelligkeit getroffen.
  • Ihr Spiel auf ausufernde, eilig durchgeführte Programmierungen zu basieren, ist kein guter Start für ein Projekt.

Unity-best-practices-planning

Entwicklung

Falsches Vorgehen und Fehler während der Entwicklung bremsen das gesamte Team und verschlechtern die Qualität des Endprodukts.

Die Versionskontrolle ist falsch aufgebaut

  • Verwenden Sie Text-Serialisierung (standardmäßig in Unity)
  • Set up built-in YAML merge tool. See more about SmartMerge finden Sie hier.
  • Set up commit hooks. See more hier.

Der Cache-Server wird nicht genutzt

Statische Daten sind in JSON- oder XML-Dateien gespeichert

  • Dies führt zu langsamen Ladevorgängen.
  • Parsing erzeugt Ausschussdaten.
  • Instead, for built-in static data use ScriptableObjects with custom editor tools.

Das Projekt enthält ungenutzte Assets, Plugins und duplizierte Bibliotheken

Es besteht die wahrscheinliche Möglichkeit, dass ungenutzte Assets in Ihrem Projekt in das Spiel eingebaut werden. Stellen Sie sicher, dass Sie keine Ausschussdaten in Ihrem Projekt belassen – wenn Sie ein Versionskontrollsystem einrichten, sollte die Wiederherstellung von Dateien kein Problem sein.

  • Überprüfen Sie, welche Abhängigkeiten Assets aus dem Asset Store in Ihr Projekt bringen. Sie könnten überrascht feststellen, dass sich fünf verschiedene JSON-Bibliotheken im Projekt befinden.
  • Veraltete Assets und Scripts aus frühen Prototypen.
  • The practice of moving old assets to "removed" folder still results in resources and scripts being built into the game.

Sich wiederholende Aktionen werden manuell durchgeführt

  • Für jede sich wiederholende Aufgabe sollte ein Script vorhanden sein, das diese automatisiert.
  • Make sure that you can "play" the game or interactive content from any scene.
  • Automate all the steps of build process, so that the application can be built with Cloud Build or locally with a press of a button.

Das Projekt wird ausschließlich im Editor profiliert

  • Always profile the content on your target device; if you profile in the Editor only, you can miss actual performance bottlenecks.

Unity Profiler

Keine Verwendung der integrierten und plattformspezifischen Profiling- und Debugging-Tools

Mehr Tipps:

Allgemeine Performance-Optimierungen

Shader-Profiling- und Optimierungstipps

Unity frame debugger

Profiling und Optimierung werden zu spät im Entwicklungszyklus durchgeführt

  • Je länger Sie das Profiling hinauszögern, desto größer können die Auswirkungen auf die Performance sein.
  • Beginnen Sie frühzeitig mit dem Profiling, damit Sie sicher sein können, dass Ihr Projekt den geplanten Frame-, Speicher- und Festplattengrößen entspricht.

Die Optimierung basiert nicht auf Testdaten

  • Stellen Sie sicher, dass Sie tatsächliche Engpässe optimieren.
  • Nutzen Sie die oben genannten Tools, um korrekte Daten zu sammeln.

Unzureichende Kenntnisse über die Zielplattform(en)

  • Stellen Sie sicher, dass Sie genug über Ihre Zielplattform(en) wissen.
  • Desktop-, Mobil- und Konsolenplattformen können sehr unterschiedliche Engpässe bereithalten.

Unity best practices development

Asset-Einstellungen

Assets (Modelle, Texturen, Sounds) nehmen in Ihrem Spiel den meisten Platz ein. Nur ein falsches Mesh im Projekt kann alle Optimierungen, die Ihre Programmierer durchgeführt haben, zunichte machen.

Sprite-Atlanten sind nicht richtig eingerichtet

  • Use 3rd-party tools (like Texture Packer) to create atlases or group sprites together in Unity. This will reduce the number of draw calls in the game.

Textureinstellungen sind nicht richtig eingerichtet

  • Stellen Sie sicher, dass Sie die richtigen Textureinstellungen für die Zielplattform kennen:
    • Welche Kompression wird von der Zielplattform unterstützt?
    • Brauchen die Texturen Mip-Maps?
  • Set up an automated way to apply these settings for new textures using AssetPostprocessor-API as shown by diesem Projekt dargestellt
  • Verhindern Sie, dass Grafiker Texturen mit falschen Einstellungen erstellen.

Unity Asset import settings

Asset-Bundles enthalten duplizierte Texturen

  • It is easy to make a mistake in setting up Asset Bundles build system. Get good guidelines hier. It is especially bad for duplicated textures.
  • Use Asset-Bundle-Browser to track dependencies.

Unity best practices asset settings

Programmierung

Ungünstige Arbeitsverfahren und Fehler in der Code-Architektur und bei der Entwicklung führen zu geringer Produktivität.

Der Code ist sehr abstrakt und schwer nachzuvollziehen

  • Abstrakter "Enterprise-Code" ist nur selten gerechtfertigt.
  • Ein solcher Code lässt sich schlechter nachvollziehen.
  • Er läuft langsamer und IL2CPP muss mehr Code generieren.

Architektur-Konventionen sind nicht definiert oder unzureichend dokumentiert:

  • Vermeiden Sie es, so zu programmieren, dass Sie verschiedene Methoden zur Erfüllung der gleichen Aufgabe nutzen, also beispielsweise die Verwendung unterschiedlicher
    • Konfigurationsformate (Dateien, Eigenschaften, Assets).
    • Events (Unity-Events, C#-Events, SendMessage).
  • Welcher Manager ist für welche Objekte zuständig?

Es fehlt ein umfassendes Verständnis des Unity-Frameloops

  • Wenn Awake, OnEnable, Update und andere Methoden aufgerufen werden.
  • Wenn Co-Routinen aktualisiert werden.
  • Wie FixedUpdate ausgeführt wird.

Die Script-Initialisierungslogik stützt sich auf die Unity-Ausführungsreihenfolge

  • Entweder "funktioniert es einfach so" oder die Script-Ausführungsreihenfolge wird missbraucht.

Die Framerate wird beim Scripten von Logik oder Animationen nicht berücksichtigt

  • Verwenden Sie Time.deltaTime für FPS-unabhängige Scripts.

Mehr Tipps:

3 coole Wege zur Architektur mit scriptfähigen Objekten

So erreichen Sie eine bessere Scripting-Erfahrung

Unity best practices programming

CPU-Leistung

High CPU usage results in "laggy" gameplay experience and drains the battery faster.

Unity CPU Profiler

Zu viele Scripts mit Update()-Methode

  • Native -> Managed calls have some overhead. See diesem Blog-Post for more details.
  • Verwenden Sie stattdessen benutzerdefinierte Manager.

Alle benutzerdefinierten Behaviours erben von einer abstrakten Klasse mit definierten Update/Awake/Start-Methoden

  • Jetzt verwenden alle Ihre Scripts die Update()-Methode.

Alle Spielsysteme werden jeden Frame aktualisiert

  • Define how frequently you want to update different systems in your game/content such as:
    • Bewegliche Objekte.
    • KI und Pathfinding.
    • Logging- und Spiel-Speicherstatus.
    • Other "heavy" systems.

Daten und Referenzen zu Objekten, die häufig benötigt werden, sind nicht im Cache gespeichert

Cache-Daten, die Sie häufig benötigen, sind:

  • Reflection
  • Find()
  • Camera.main
  • GetComponent()

Häufig instanziierte Objekte sind nicht zusammengefasst

  • Die Instanziierung von Objekten ist langsam.
  • Erstellen Sie beim Start des Spiels Objekt-Pools.
  • Verwenden Sie Objekte mehrmals, statt neue zu erstellen.

Speicher wird jeden Frame zugewiesen

  • Selbst kleine Zuweisungen, die jeden Frame erfolgen, erzeugen früher oder später einen GC-Spike.
  • Versuchen Sie, ALLE Zuweisungen zu beseitigen.

Speicher-zuweisende APIs werden anstelle von nicht zuweisenden Alternativen verwendet

  • LINQ.
  • String-Verkettung.
  • Unity-APIs, die Arrays ausgeben:
    • Physics.RaycastAll, Mesh.vertices, GetComponents, etc.

Mehr Tipps:

Optimal arbeiten mit C#-Datenstrukturen und Unity-APIs

Unity best practices CPU performance

GPU-Leistung

High GPU usage results in low framerate, drains battery faster and the game/content is perceived as "running slow".

Unity GPU Profiler

Für Mobilgeräte: Das Projekt hat zu viel Overdraw

  • Mobilgerät-GPUs können nur eine bestimmte Pixelzahl pro Sekunde aufrufen.
  • Overdraw ist einer der größten Performance-Engpässe auf Mobilgeräten.
  • Rufen Sie keine unnötigen transparenten Bilder auf.
  • Verwenden Sie komplexere Meshes, um vollständig transparente Bereiche zu beschneiden.

Für Mobilgeräte: Die Shader sind zu komplex

  • Verwenden Sie auf Mobilgeräten nicht Standard Shader.
  • Erstellen Sie benutzerdefinierte, spezialisierte Shader.
  • Verwenden Sie für Low-End-Geräte vereinfachte Versionen oder schalten Sie einige Effekte aus.

Zu viel dynamische Beleuchtung wird mit Forward-Rendering verwendet

  • Jede Lichtquelle fügt für jedes beleuchtete Objekt einen Render-Pass hinzu.

Falsche Einstellungen im Projekt unterbrechen dynamisches Batching

  • Objects must be "similar" to be dynamically batched.
  • Frame Debugger zeigt, warum für bestimmte Objekte kein Batching durchgeführt wurde.

LODs werden nicht benutzt oder sind nicht richtig eingerichtet

  • LODs let rendering further objects take fewer resources

Mehr Tipps:

Warum für Ihre Drawcalls kein Batching durchgeführt wird

Mobilgerät-Optimierung: Beste Vorgehensweisen

Unity best practices GPU performance

UI-Leistung

Unity UI ist ein fantastisches Tool für Grafiker, allerdings wird es oft nicht richtig eingerichtet, sodass es viele CPU- und GPU-Ressourcen verbraucht.

Unity UI

Unterschiedliche Auflösungen und Aspektverhältnisse werden nicht berücksichtigt

  • Testen Sie die UI auf Geräten mit unterschiedlicher Auflösung und unterschiedlichen Aspektverhältnissen
  • Manchmal ist es besser, verschiedene UI-Bildschirme für verschiedene Geräte zu erstellen

Animierte Elemente sind in derselben Canvas

  • Wenn sich ein Element ändert, muss die Canvas ein neues kombiniertes Mesh erstellen
  • Für komplexe Canvases kann dies sehr aufwändig sein
  • Verschieben Sie animierte Elemente in separate Canvases

"Opening" a new window is not optimized

  • Wenn ein neues Fenster oder ein großer Teil der UI erstellt wird, kommt es im Spiel zu einer spürbaren Verzögerung. Sie sollten diesen Effekt minimieren.
  • Gestalten Sie UI-Fenster weniger komplex.
  • Teilen Sie die UI auf.
  • Speichern Sie Fenster im Cache.

Listen enthalten sehr viele Einträge

  • Verwenden Sie Listenelemente dynamisch erneut, anstatt sie alle gleichzeitig zu erstellen.
  • Erstellen Sie eine verschachtelte Canvas in der Liste.
  • Use open source implementations, such as diese.

Siehe auch:

Unity UI: Tipps zur Optimierung

Unity best practices UI performance

Weitere Ressourcen

Wir wollen es wissen! Haben Ihnen diese Inhalte gefallen?

Ja, weiter so. Na ja. Könnte besser sein.

Unity Buffbot macht Ihnen die Arbeit leichter

Melden Sie sich an, um wöchentlich technisches und kreatives Know-how von Unity-Experten zu erhalten.

Subscribe
Alles klar

Wir verwenden Cookies, damit wir Ihnen die beste Nutzererfahrung auf unserer Website bieten können. Weitere Informationen erhalten Sie in unserer Cookie-Richtlinie.