IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

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?

Tvorba 2D arkády pre Android v Unity

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.


 

Predchádzajúci článok
Unity (C #) Android: Štart, Skóre, PlayerPrefs
Všetky články v sekcii
Tvorba 2D arkády pre Android v Unity
Preskočiť článok
(neodporúčame)
Unity (C #) Android: MenuPart, Eraser, pozadia 2
Článok pre vás napísal vratislavino
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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