10. diel - Unity (C #) Android: GUI - menu 2
V minulej lekcii, Unity (C #) Android: Prestavba, bodáky , sme upravili pohyb hráčov a pozmenili aj spôsob, akým sa nám posúvajú prekážky.
V minulej lekcii, Unity (C #) Android: Prestavba, bodáky , sme sa zaoberali vytváraním GUI kódom. Dnešné tutoriál sa zaoberá opäť vytvorením menu, ale tentoraz by som chcel ukázať ďalšie 2 metódy, ako ide GUI urobiť. Tiež pribudne čiastočne funkcionalita.
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 - pomocou GUITexture
using UnityEngine; using System.Collections; public class GUITextureMenu : MonoBehaviour { public GUITexture[] buttons; // pole uchovávající všechny buttony, na které se dá kliknout public Texture2D button_up; public Texture2D button_down; bool mobile; bool down; // Use this for initialization void Start () { mobile = Utils.IsMobile(); } // Update is called once per frame void Update () { Vector3 pos = Vector3.zero; if(mobile) { if(Input.touches.Length > 0) //"pokud je zaznamenán dotyk" { Touch t = Input.GetTouch(0); pos = t.position; if (t.phase == TouchPhase.Ended) // pokud se jedná o fázi dotyku, kdy jsme prst odendali down = true; else down = false; } } else { pos = Input.mousePosition; if (Input.GetMouseButtonUp(0)) down = true; else down = false; } foreach(GUITexture gt in buttons) { if (gt.GetScreenRect().Contains(pos)) { gt.texture = button_down; if(down) { React(gt.name); // reakce na jednotlivá tlačítka } } else { gt.texture = button_up; } } } void React(string nam) { switch(nam) { case "Survival": { GameObject.Find("Reaction").SendMessage("ClickedSurvival"); break; } case "Arcade": { GameObject.Find("Reaction").SendMessage("ClickedArcade"); break; } case "Exit": { GameObject.Find("Reaction").SendMessage("ClickedExit"); break; } } //GameObject.Find("Reaction").SendMessage(); } }
Jednoduchý reakčný skript, už čiastočne sprevádzkovaný
using UnityEngine; using System.Collections; public class ReactionScript : MonoBehaviour { private void ClickedArcade() { print("clicked Arcade"); } private void ClickedSurvival() { Application.LoadLevel("default_Scene"); } private void ClickedExit() { Application.Quit(); } }
Ďalší typ menu, tentoraz cez Raycast Sprite
using UnityEngine; using System.Collections; public class RaycastMenu : MonoBehaviour { Camera c; public LayerMask lm; // Use this for initialization void Start () { c = GetComponent<Camera>(); } // Update is called once per frame void Update () { if(Input.GetMouseButtonDown(0)) { Vector2 pos = Input.mousePosition; Ray r = c.ScreenPointToRay(pos); RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction, Mathf.Infinity, lm); if(hit == null && hit.collider == null) { } else { print(hit.collider.name); } } } }
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: MenuPart, Eraser, pozadia , sa budeme venovať optimalizáciu a opakovanie pozadia.