Code-Tags welche Auswirkungen auf die Darstellung im Inspector haben.
[Range(0, 100)]
public float MyValue;
[Header("Hi there!")]
public string TheHeader = "Header!";
[Tooltip("This is THE VALUE!")]
[ContextMenuItem("Reset", "resetTheValue")]
public float TheValue = 42.0f;
[Space(50)]
public string TheString = "THE STRING";
private void resetTheValue()
{
TheValue = 42;
}
Listen:
private ReorderableList list;
list = new ReorderableList(property.serializedObject, property.FindPropertyRelative("tagList"), true, true, true, true);
list.drawHeaderCallback += rect => GUI.Label(rect, label);
list.drawElementCallback += (rect, index, active, focused) =>
{
rect.height = 16;
rect.y += 2;
EditorGUI.PropertyField(rect,
list.serializedProperty.GetArrayElementAtIndex(index),
GUIContent.none);
};
list.DoList(position);
7c1a8697-5758-4ff0-8b63-5a9ba3d4a353|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
- Niedrige Vertex-Anzahl bei Modellen
- "Occlusion culling" (auch automatisch durch "viewing frustrum" - Sichtweite der Kamera)
- komplexe Shader vermeiden, "Mobile"-Versionen nutzen (vorallem keine "fragment shader", also Pro-Pixel-Shader)
- Texturen komprimieren und Größe reduzieren
- Mipmaps nutzen (nicht für UI!)
- Level of Detail (LoD) anwenden
- wenige Materialen verwenden -> besseres "batching", siehe DrawCall - Optimierungen
- Texturen zusammenfassen in "texture atlases" (dann auch entsprechend Renderer.sharedMaterial verwenden)
- Light Mapping ("baking") verwenden, siehe Licht - Optimierungen
- Transparenz vermeiden (bzw. alpha cut/test Shader)
- wenige Lichter
- Post Processing minimieren
Läuft das Spiel schneller bei niedrigerer Auflösung? -> Füllratenproblem
- Alpha-testing Shader gegen Alpha-blend austauchen
- einfachere Shader verwenden (Mobile, kein pow, exp, log, sin, tan usw.)
c7e1effa-b611-405d-9ed2-cddd8bdbf274|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Static Batching
Statische Objekte sollten als "static" markiert werden, Unity fasst diese Objekte dann in einem DrawCall zusammen.
Allerdings nur Objekte, welche das selbe Material verwenden. D.h. hier sollten "Texture atlases" verwendet werden.
Dynamic Batching
Unity fasst nicht statische Objekte automatisch fürs "Dynamic Batching" zusammen.
Bedingungen:
- Objekte welche unter 900 vertex (Ecken) haben
- gleiche Skalierung
- gleiches Material
- keine Lightmaps
- keine Multi-Pass Shader
be295668-5929-4f26-860b-e3c9d8a7a622|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Objekte welche statischen Schatten ("baked") empfangen sollen, sollten im Modell "Generate Lightmap UVs" aktiviert haben.
Unity nutzt dann den 2. UV-Kanal zum Ablegen der Schatteninformationen.
In den Lighting-Einstellungen der Szene sollte dann "Baked GI" aktiviert sein. (Nicht mit "Precomputed Realtime GI" kombinieren!)
Ausführung der Berechnung bzw. "Auto"Aktivierung nicht vergessen.
0e8004b3-0d2d-4551-938d-bd538553ef57|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Texturen
- wenn machbar auf Mipmaps verzichten
- komprimieren
- Read/Write abschalten
- Größe anpassen
Analyse und Maßnahmen
- Profiler.GetRuntimeMemorySize() RAM-Verbrauch durch Objekte
- Resources.UnloadAsset (Referenz bleibt bestehen)
- Resources.UnloadUnusedAssets (unreferenzierte)
- Vor und nach dem Laden eines Levels System.GC.Collect
- structures -> Stack, classes -> Heap
- foreach vermeiden, da Enumeratoren erschaffen werden
- analog anonyme Methoden und Lambdas
- AssetBundles verwenden
- strings nicht konkatenieren, ansonsten StringBuilder nutzen
- Asset pool verwenden bei häufigen Objekten, wie z.B. Geschosse
6da1cec0-0d26-41ec-84e6-5493717cb903|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Platziert man die Szenenansicht an gewünschter Stelle, kann man diese via
Strg + Shift + f als Transformdaten, für das aktuell selektierte Objekt übernehmen.
Sehr praktisch wenn man eine Kamera ausrichten möchte.
25345347-bdf0-486f-83a3-1b63d939ff76|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Die Farbe des Editors lässt sich für den Playmode einstellen, so merkt man immer wenn man "live" ist.
Edit -> Preferences -> Colors ->
Playmode tint
8d1b4c39-cadb-41e4-8f31-650335610bed|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Für z.B. Wegpunkte ist es hilfreich 3D Elemente wie eine Sphere einzubinden, um die Wegpunkte ordentlich platzieren zu können.
Damit diese nicht im Spiel gerendert werden bekomme diese einen eigenen Layer. Dieser Layer kann anschliessend an der betreffenden Kamera deaktiviert werde.
fb2e8dad-6682-4d54-a3e0-c875b7f05135|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04