11. diel - Unity (C #) Android: MenuPart, Eraser, pozadia
V minulej lekcii, Unity (C #) Android: Štart, Skóre, PlayerPrefs , sme sa pozreli na počítač skóre pri zdolanie prekážky a tiež na počkanie na štarte, kým hráč nezačne hrať.
V minulej lekcii, Unity (C #) Android: Štart, Skóre, PlayerPrefs , sme sa zaoberali pokračovaním GUI. Dnešná tutoriál bude o ľahké optimalizáciu v podobe mazania už prejdených Stalag. Ďalej sa naučíme ako na opakovanie nekonečného pozadí, prechádzanie v menu medzi rôznymi časťami (MenuPart).
Video
Posúvanie pozadia
Skript priraďte všetkým svojim pozadím. Jeho úlohou je sa pri kolízii s Eraser presunúť za nasledujúce pozadie.
using UnityEngine; using System.Collections; public class BGMover : MonoBehaviour { void OnTriggerEnter2D(Collider2D col) { Bounds b = GetComponent<SpriteRenderer>().bounds; float sizeX = b.size.x; Vector3 pos = transform.position; pos.x += 2 * sizeX - 10; transform.position = pos; } }
Eraser
using UnityEngine; using System.Collections; public class EraserScript : MonoBehaviour { void OnTriggerEnter2D(Collider2D col) { if(col.CompareTag("Stalag")) { if(col != null) Destroy(col.gameObject); } } }
Skriptovanie menu
Dnes sa málinko rozrástol a zmenil skript pre Menu
Vzhľad a interface menu - pomocou GUITexture
using UnityEngine; using System.Collections; [ExecuteInEditMode] public class OnGUIScriptMenu : MonoBehaviour { public bool useLayout; public GUISkin menuSkin; public GameObject reaction; Vector2 scrollPos = Vector2.zero; private MenuPart currPage = MenuPart.Main; void OnGUI() { GUI.skin = menuSkin; if (useLayout) GUIUseLayout(); else GUIDontUseLayout(); } void GUIUseLayout() { if (currPage == MenuPart.Main) { GUILayout.BeginArea(new Rect(0, 0, Screen.width, Screen.height)); GUILayout.FlexibleSpace(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); 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");*/ NavigateTo(MenuPart.LevelSelect); } if (GUILayout.Button("Exit", GUILayout.Width(300), GUILayout.Height(100))) { reaction.SendMessage("ClickedExit"); } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndArea(); } if(currPage == MenuPart.LevelSelect) { GUILayout.BeginArea(new Rect(0, 150, Screen.width, Screen.height - 300)); GUILayout.FlexibleSpace(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); scrollPos = GUILayout.BeginScrollView(scrollPos); for (int i = 1; i < 11; i++ ) { //TODO DISABLE HORIZONTAL SCROLLBAR GUILayout.BeginHorizontal(); GUILayout.Space(10); if (GUILayout.Button("Level" + i.ToString("D2"), GUILayout.Width(300))) { Application.LoadLevel("Level" + i.ToString("D2")); } GUILayout.Space(10); GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndArea(); } } void GUIDontUseLayout() { GUI.Window(0, CenterRect(320, 350), WindowFunc, ""); } 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; } 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"); } } void NavigateTo(MenuPart mp) { currPage = mp; } } public enum MenuPart { Main, LevelSelect }
Ako hra vyzerá teraz?
Problémy?
Ak máte nejaké otázky, 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 2 , doriešime resty ohľadom Stalag a prepínanie levelov.