9. diel - Unity (C #) Android: GUI - menu 1
V minulej lekcii, Unity (C #) Android: MenuPart, Eraser, pozadia 2 , sme vylepšili odstraňovanie prekážok, detekciu objektu a pridali levely.
V minulej lekcii, Unity (C #) Android: MenuPart, Eraser, pozadia 2 , sme sa zaoberali opravovaním generovanie mapy. Dnešné tutoriál sa zaoberá vytvorením menu. Je to iba prvá časť. Druhou sa pokúsim urobiť čo najskôr, pretože tam budú kľúčové informácie k sprevádzkovanie tohto prvého spôsobu tvorenia menu.
Video
Skriptovanie menu
Dnes sa nám skripty patrične rozrástli, takže sa ich pokúsim aj trochu okomentovať
Vzhľad a interface menu
using UnityEngine; using System.Collections; [ExecuteInEditMode] //tento řádek nám umožní vidět změny v GUI, aniž bychom museli hru spouštět public class OnGUIScriptMenu : MonoBehaviour { public bool useLayout; public GUISkin menuSkin; public GameObject reaction; // funkce sloužící k vykreslování GUI (neboli HUD), pozor na to, jak se metoda píše // a myslete na to, že se volá asi 7x častěji než Update, takže tady // nejsou nejvýhodnější složité opakované propočty void OnGUI() { GUI.skin = menuSkin; // přiřazení skinu, tímto // řádkem nastavujeme předem definovaný vzhled if (useLayout) GUIUseLayout(); else GUIDontUseLayout(); } // funkce použitá pro vkládání prvků do layoutu void GUIUseLayout() { // počáteční area, obaluje celý screen, umožňuje nám pozicovat // pomocí GUILayout pozicovacích příkazů GUILayout.BeginArea(new Rect(0,0,Screen.width, Screen.height)); // vyplní místo maximální možnou mezerou GUILayout.FlexibleSpace(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); // funkce GUILayout.Button() vrací bool, což znamená, že ho můžeme dát // rovnou do podmínky if(GUILayout.Button("Survival", GUILayout.Width(300), GUILayout.Height(100))) { // SendMessage na daném objektu zavolá ve všech skriptech metodu // ClickedSurvival(), pokud ji mají reaction.SendMessage("ClickedSurvival"); } if(GUILayout.Button("Arcade", GUILayout.Width(300), GUILayout.Height(100))) { reaction.SendMessage("ClickedArcade"); } if(GUILayout.Button("Exit", GUILayout.Width(300), GUILayout.Height(100))) { reaction.SendMessage("ClickedExit"); } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndArea(); } void GUIDontUseLayout() { // funkce pro vytvoření okna s callback funkcí WindowFunc GUI.Window(0, CenterRect(320, 350), WindowFunc, ""); } // metoda, která nám vrátí vycentrovaný Rect o správné velikosti Rect CenterRect(int width, int height) { Rect r = new Rect(); r.width = width; r.height = height; r.x = Screen.width / 2 - width / 2; r.y = Screen.height / 2 - height / 2; return r; } // Callback funkce, která slouží k vykreslení obsahu uvnitř okna void WindowFunc(int id) { if (GUILayout.Button("Survival", GUILayout.Width(300), GUILayout.Height(100))) { reaction.SendMessage("ClickedSurvival"); } if (GUILayout.Button("Arcade", GUILayout.Width(300), GUILayout.Height(100))) { reaction.SendMessage("ClickedArcade"); } if (GUILayout.Button("Exit", GUILayout.Width(300), GUILayout.Height(100))) { reaction.SendMessage("ClickedExit"); } } }
Jednoduchý reakčný skript, ktorý budeme upravovať v budúcom diele sprevádzkovať
using UnityEngine; using System.Collections; public class ReactionScript : MonoBehaviour { // metody mohou být private, protože je voláme metodou SendMessage("názevmetody"), // která se volá ve skriptech lokálně private void ClickedArcade() { print("clicked Arcade"); } private void ClickedSurvival() { print("clicked Survival"); } private void ClickedExit() { print("clicked Exit"); } }
Jednoduchá utilitka, ktorá nám vráti, či je zariadenie, na ktorom spúšťame hru, mobil
using UnityEngine; using System.Collections; public class Utils : MonoBehaviour { public static bool IsMobile() { if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.WP8Player || Application.platform == RuntimePlatform.IPhonePlayer) return true; else return false; } }
Ako hra vyzerá teraz?
Problémy?
Ak máte nejaké otázky ohľadom nastavovania, neváhajte sa opýtať v komentároch, alebo mi napísať do správ.
V budúcej lekcii, Unity (C #) Android: GUI - menu 2 , sa budeme naďalej venovať vytváranie menu.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 86x (1.74 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#