Lekce 6 - Unity (C#) Android: GUI - menu 2
Dnešní tutoriál se zabývá opět vytvořením menu, ale tentokrát bych chtěl ukázat další 2 metody, jak jde GUI udělat. Také přibude částečně funkcionalita.
Video
Skriptování menu
Dnes se nám skripty patřičně rozrostly, takže se je pokusím i trochu okomentovat
Vzhled a interface menu - pomocí 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, již částečně zprovozněný
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(); } }
Další typ menu, tentokrát přes 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); } } } }
Jak hra vypadá teď?
Problémy?
Pokud máte nějaké otázky ohledně nastavování, neváhejte se zeptat v komentářích, nebo mi napsat do zpráv.
V příští lekci, Unity (C#) Android: MenuPart, Eraser, pozadí, se budeme věnovat optimalizaci a opakování pozadí.