Tutorial badający czy w ogóle nadaję się do pisania takich rzeczy, oraz czy jest sens się produkować.
Spotkaliście się kiedyś z problemem, że Wasze GUI rozjeżdżało się na innych rozdzielczościach? Tak? To właśnie się nauczycie jak temu zapobiec.
Bez zbędnych ceregieli:
Potrzebujemy trzech zmiennych:
float org_width= 1024.0f;
float org_height= 768.0f;
Vector3 scale;
org_width i org_height są odpowiednikami oryginalnej rozdzielczości na której pisaliście swoje GUI. Zwróćcie uwagę na fakt że są one floatami, pomimo faktu że sama rozdzielczość jest liczbą całkowitą.
Vector3 jest nam potrzebny do zapisania skali.
scale.x = Screen.width/org_width;
scale.y = Screen.height/org_height;
scale.z = 1;
Ustawiamy skalę, x to szerokość (width), a y to wysokość (height), skali z nie zmieniamy, jednak musimy ją przypisać ponieważ domyślnie jest zero.
Wartości które przypisujemy powinny być oczywiste, obecna rozdzielczość, podzielona przez oryginalną. Dzięki temu że nasze oryginalne rozmiary zapisaliśmy jako liczby zmiennoprzecinkowe, wynik również jest zwracany w tej formie.
Matrix4x4 org_matrix = GUI.matrix;
GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
//Operacje na GUI
GUI.matrix = org_matrix;
Tworzymy zmienną typu Matrix4x4, ja nazwałem ją "org_matrix" i przypisujemy jej GUI.matrix, zanim go zmienimy, na końcu przywracamy oryginalny matrix, jeżeli tego nie zrobimy możemy doświadczyć niemiłych problemów z nie wyświetlającymi się elementami.
Matrix4x4.TRS przyjmuje trzy parametry, translation, rotation i scale, stąd nazwa. Ponieważ nie chcemy zmieniać pozycji ani rotacji, je zostawiamy bez zmian, natomiast skalę zastępujemy naszą własną przypisaną wcześniej.
Dla tego tutorialu wystarczy wywoływanie całości w OnGUI():
void OnGUI ()
{
scale.x = Screen.width/org_width;
scale.y = Screen.height/org_height;
scale.z = 1;
Matrix4x4 org_matrix = GUI.matrix;
GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
//Operacje na GUI
GUI.matrix = org_matrix ;
}
No i to by było na tyle. Czekam na jakiś feedback z Waszej strony odnośnie błędów, chociaż mam nadzieję że takowych nie ma i przystępności tekstu.