6. díl - Unity (C#) Android: GUI - menu 2

C# .NET Unity 3D Unity (C#) Android: GUI - menu 2

Tento videotutoriál navazuje na předchozí díl o programování her pro Android v Unity, kde jsme se zabývali vytvářením GUI kódem. Dnešní dí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.


 

  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?
Ještě nikdo nehodnotil, buď první!


 



 

 

Komentáře

Avatar
OZiiK
Člen
Avatar
OZiiK:

Ahoj. Tutorialy jsou super. Jen bych se chtěl zeptat budeš dělát tutorialy pouze pro android nebo i pc?. A mám prosbu jestli by jsi neudělal tutorial třeba jak udělat nějakou stolní hru. (Tam by se totiž perfektně ukazalo: jak udělat nahodnou proměnou, co se stane když stoupne na pozici,atd.). K tomu multiplayeru co jsem se ptal minula tak by mě pravě více zajímal ten multiplayer na pc. To je asi vše. Promiń že jsem tak upsaný stydím se za to že jsem skoro jediný kdo má nápady na tutorial. Zbytek asi umí všechno zavidím jim. Já se učim programovat 2 měsíce a jsem rád za každý tutorial :D

Odpovědět 14.8.2014 18:29
Dokud
Avatar
Odpovídá na OZiiK
Vojtěch Pospíchal:

Pokud se učíš dva měsíce a už jsi v Unity tak jsi buď nadpřirozeně inteligentní a nebo tupý. Proč se učíš rovnou v herním enginu? Většina lidí se na engine nevrhne alespoň do chvíle, než naprogramuje svůj vlastní primitivní engine. (Nebo přinejmenším dokud si není jistý, že by to zvládl.)

 
Odpovědět  ±0 14.8.2014 18:56
Avatar
OZiiK
Člen
Avatar
OZiiK:

K tomu můžu říct jen jedno "všichni jsme jiní" někdo se titěrně učí základy rok. Mě ale vyšlo, že se mi lépe uči z enginu protože tam je to jako by vše už připravené.

Odpovědět 14.8.2014 20:19
Dokud
Avatar
Odpovídá na OZiiK
Vojtěch Pospíchal:

Tím pádem nebudeš umět nic, protože všechny základy za tebe udělá engine a jakmile nastoupíš do práce, budeš nepoužitelný protože ty základy by za tebe přeci měl udělat ten engine ne? Jenže problém. On ten engine nebude vždycky k dispozici.

 
Odpovědět  ±0 14.8.2014 21:10
Avatar
vratislavino
Redaktor
Avatar
Odpovídá na OZiiK
vratislavino:

Pokud začínáš celkově s programováním, měl bys opravdu začít jinde, doporučuji Brackeys na youtubu, má super tutoriály na C#, pak nastudovat nějaký OOP, objektový návrhy. Jinak opravdu nemá cenu začínat s enginem. Ani ne proto, že by se tam špatně učilo nebo tak, ale spíš proto, že tam píšeš něco jako MyScript : MonoBehavior a vlastně vůbec nevíš o co jde :) nepočítaje takový základ jako je třída :)

Odpovědět  +1 14.8.2014 21:39
Hlavou teď neprorazíš, ale stojí za to to zkoušet :)
Avatar
OZiiK
Člen
Avatar
OZiiK:

asi jsem vše špatně uvedl. No Unity jsem si vybral proto že na internetu má všechny scripty podrobně nadefinovány. Celkově s programováním no já ani nevím začínal jsem když mi bylo asi 13 let a to s programováním konzole Dos pak dlouho nic postupem času to byl jazyk tzv "pawno" ten je podobný pythonu a je to vlastně jazyk jedné hry,. Chtěl jsem něco víc a tak jsem se vratil k Dosu, pak jsem zkoušel Javu ta mi vůbec nesedla a dopasud se učim v c#. Ale jak jsem psal jsem zkratka pohodlnejší když to mám připravené. Ano beru na vědomí že připravené to nebudu mít vždy to zatím nechci řešit pěkně postupně myslím si že je lepší začit od nejlehčího po nejtěžší.

Odpovědět 14.8.2014 21:53
Dokud
Avatar
vratislavino
Redaktor
Avatar
Odpovídá na OZiiK
vratislavino:

Dobrá tedy, však je to tvůj názor :) a abych odpověděl na tvé otázky: Deskovou hru zatím neplánuji zpracovávat do tutoriálů, ještě jsem žádnou nezkoušel dělat. Co se týče multiplayeru, zatím se zabývám tímto tutoriálem a jde kompletně o Android. Tam jsem ještě internetovou komunikaci nezkoumal, ale co se týče PC, je toho na netu hromada. Na YT ;) Nespadá to do tohoto tutoriálu, protože je pouze pro Android a neumim si ani představit, co by tam bylo online :)

Odpovědět 15.8.2014 2:58
Hlavou teď neprorazíš, ale stojí za to to zkoušet :)
Avatar
stajo
Člen
Avatar
stajo:

zdravim. spravil som si apk podla navodu v prvej casti. nainstaloval som ju do mobilu, ale nejde mi spustit (spadne bez vykreslenia sceny). je tam vytvorena jedna scena, kde je pridane osvetlenie. zatial som vyskusal toto:

  • zbuildil som pre win, a spustil - vsetko OK.
  • nainstaloval som na PC StartBlueStacks, a pustil na nom build pre android -> spadne to ako na mobile
  • nainstaloval som novsie unity

googlim uz par tyzdnov, ale komenty, kde sa spomina moj problem su bez odpovede. dik moc za kazdu radu

 
Odpovědět 2.9.2014 21:35
Avatar
vratislavino
Redaktor
Avatar
Odpovídá na stajo
vratislavino:

Ahoj, napadá mě pouze problém s verzí Androidu. Ale pokud byl stejný problém na BlueStacks, pak je to divné. Zkus si ještě jednou stáhnout Adroid SDK, otevřít SDK manager a stáhnout vše potřebné. Pak najít znovu v Unity cestu k tomuto SDK a zkusit build znovu.

Kdyby mě ještě něco napadlo, dám vědět :)

Odpovědět 2.9.2014 21:44
Hlavou teď neprorazíš, ale stojí za to to zkoušet :)
Avatar
stajo
Člen
Avatar
Odpovídá na vratislavino
stajo:

skusil som pustit logcat. zaujimave bolo:
D/gralloc_goldfish( 678): Emulator without GPU emulation detected.

E/Unity ( 678): [EGL] No suitable configuration found that matches the minimu
m critera.

malo by to byt vo verzii unity:
http://issuetracker.unity3d.com/…roid-devices

ale skusil som tri verzie, a stale mi to nejde :(

 
Odpovědět 13.9.2014 20:37
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.

Zobrazeno 10 zpráv z 10.