7. díl - Unity (C#) Android: MenuPart, Eraser, pozadí

C# .NET Unity 3D Unity (C#) Android: MenuPart, Eraser, pozadí

Tento videotutoriál navazuje na předchozí díl o programování her pro Android v Unity, kde jsme se zabývali pokračováním GUI. Dnešní dí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ď?

Problémy?

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


 

  Aktivity (1)

Článek pro vás napsal vratislavino
Avatar
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.

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!