Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 7 - Unity (C#) Android: MenuPart, Eraser, pozadí

V minulé lekci, Unity (C#) Android: GUI - menu 2, jsme se zabývali pokračováním GUI.

Dnešní tutoriál bude o lehké optimalizaci v podobě mazání již prošlých stalagů. Dále se naučíme jak na opakování nekonečného pozadí, přecházení v menu mezi různými částmi (MenuPart).

Video

Posouvání pozadí

Skript přiřaďte všem svým pozadím. Jeho úkolem je se při kolizi s Eraserem přesunout za následující pozadí.

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);
        }
    }


}

Skriptování menu

Dnes se malinko rozrostl a změnil skript pro Menu

Vzhled a interface menu - pomocí 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
}

Jak hra vypadá teď?

Zdrojákoviště Unity - 2D hry

Problémy?

Pokud máte nějaké otázky, neváhejte se zeptat v komentářích, nebo mi napsat do zpráv.

V příští lekci, Unity (C#) Android: MenuPart, Eraser, pozadí 2, dořešíme resty ohledně stalagů a přepínání levelů.


 

Předchozí článek
Unity (C#) Android: GUI - menu 2
Všechny články v sekci
Zdrojákoviště Unity - 2D hry
Přeskočit článek
(nedoporučujeme)
Unity (C#) Android: MenuPart, Eraser, pozadí 2
Článek pro vás napsal vratislavino
Avatar
Uživatelské hodnocení:
1 hlasů
Autor se věnuje programování v C#, především pak ve vývojovém prostředí Unity3D. Má asi pětileté zkušenosti s programováním a momentálně pracuje na připravované hře Azulgar: Beyond The Frontiers.
Aktivity