Unity Game für mehrere Plattformen optimieren?
Vorab: Ich bin noch Programmier-Anfänger. Bitte nehmt mir manche dummen Fragen nicht übel! :)
Hey! Ich wollte mal fragen wie ich mein Unity Spiel für mehrere Plattformen (zb. Windows und Android) optimieren kann? Ich habe zb. das Problem dass die Android Version von meinem Spiel in 18:9 ist und die Windows Version in 16:9. Dadurch werden einige Icons vom Menü immer wieder verschoben. Was kann ich dagegen tun?
Eine weitere Frage die mir gerade durch den Kopf gegangen ist, wie funktioniert es dass einige spiele in den Einstellungen verschiedene Optionen haben, die es nur auf dieser Plattform gibt? (zb. eine Einstellung auf dem PC die es in der Mobile Version nicht gibt)
Ich hoffe ihr könnt mir bei diesen Fragen weiterhelfen! Ich würde mich sehr über Antworten freuen! :) Danke im voraus!
1 Antwort
Hi!
Dein UI-Theme lässt sich recht einfach in den Griff bekommen: https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/HOWTO-UIMultiResolution.html Das Stichwort hier ist, dass Du die Ankerpositionen und Pivot-Punkte korrekt setzten musst, damit sich die Elemente bei unterschiedlicher Auflösung korrekt platzieren. Für die Größenskalierung sorgt dann der Canvas Scaler. Findest Du alles im angesprochenen Link. :)
Zu Deiner anderen Frage mit den Optionen:
Hier hast Du generell zwei Möglichkeiten, herauszufinden, wo Du bist:
Entweder Du nutzt Application.platform (https://docs.unity3d.com/ScriptReference/Application-platform.html), um herauszufinden, auf welcher Plattform Du bist und dementsprechend Controls anzuziegen/auszublenden:
void Start() {
if (Application.platform = RuntimePlatform.Android) {
einButtonDerNurBeiWindowsSichtbar.SetActive(false);
}
}
Oder Du kannst auch Compiler-Direktiven (https://docs.unity3d.com/Manual/PlatformDependentCompilation.html) nutzen:
void Start() {
#if UNITY_ANDROID
einButtonDerNurBeiWindowsSichtbar.SetActive(false);
#endif
}
Jetzt stellt sich noch die Frage: Wann nutze ich was? Das lässt sich ganz einfach beantworten, denn es gibt einen gravierenden Unterschied zwischen beiden Möglichkeiten:
Im ersten Fall wird der Code mit in Dein Spiel einkompiliert und zur Laufzeit wird er ausgewertet. Im zweiten Fall wird der Code nur bedingt mit in ein Spiel einkompiliert. D.h., wenn Du das Spiel für Windows erstellst, wird die Zeile mit dem "#if UNITY_ANDROID" überhaupt nicht mehr im Endergebnis zu finden sein.
Compiler Direktiven muss man immer dann nutzen, wenn man bspw. auf Funktionen/APIs zugreift, die es auf dem anderen Betriebssystem nicht gibt. Wenn Du bspw. auf bei Android auf das Gyrometer/Accelerometer zugreifen willst, dann sind das Funktionen, die Windows nicht kennt. Ergo kann Unity mit dieser API Dein Spiel für Windows überhaupt nicht kompilieren. Hier muss man dann eine Compiler Direktive nutzen, damit der Code erst gar nicht sichtbar wird für Windows, daher kommt dort dann auch kein Fehler. :)
Hey! Vielen vielen Dank für diese lange und detaillierte Antwort! ❤️
Es ist nicht selbstverständlich dass sich jemand so viel Zeit für eine Antwort nimmt! :)