2. díl - Unity (C#) Android: Pohyb, grafika, particles

C# .NET Unity 3D Unity (C#) Android: Pohyb, grafika, particles

Tento videotutoriál navazuje na předchozí díl o programování her pro Android v Unity, kde jsme si Unity nastavili na Android. Druhý díl se zabývá hráčem: pohybem, grafikou a particles.

Video

Vytvoření hráče

Přidávám skript, který je použit ve videu, pokud se vám ho nechce opisovat :)

using UnityEngine;
using System.Collections;

public class PlayerMoveScript : MonoBehaviour {

        float flapAmount = 10;
        public float speed = 150;

        bool android;

        // Use this for initialization
        void Start () {
                if (Application.platform == RuntimePlatform.Android)
                        android = true;
                else
                        android = false;
        }

        // Update is called once per frame
        void Update () {

                Vector3 vel = rigidbody2D.velocity;
                print (vel);

                if (!android)
                {
                        if (Input.GetMouseButtonDown (0) || Input.GetKeyDown(KeyCode.Space))
                        {
                                vel = Flap(vel);
                        }
                }
                else
                {
                        if(Input.touches.Length > 0)
                        {
                                vel = Flap(vel);
                        }
                }

                vel.x = speed * Time.deltaTime; // plynulý pohyb dopředu

                rigidbody2D.velocity = vel; // upravenou hodnotu ve 'vel' uložíme zpět jako vlastnost rigidbody2D
        }

        Vector3 Flap(Vector3 v) // funkce, která se postará, aby nám fireball popolétl
        {
                v.y = flapAmount;
                return v;
        }

}

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?
Celkem (6 hlasů) :
3.666673.666673.666673.66667 3.66667


 



 

 

Komentáře
Zobrazit starší komentáře (9)

Avatar
David Endrych:

podle té chyby bych neřekl, že je problém v kodu, ale tím že jsi asi zapomněl na objekt, který se jmenuje Player dát komponentu Rigidbody a tím že ji v kodu využíváš tak vzniká chyba, ale nejsem si jistý

 
Odpovědět 9.12.2015 22:02
Avatar
vratislavino
Redaktor
Avatar
vratislavino:

Ahoj, David Endrych má pravdu, pravděpodobně jsi zapomněl na objekt Player přidat komponentu Rigidbody 2D.
Co se týče kódu, který jsi napsal (ohledně změny od Unity 5), rád bych jen dodal, že pokud je ta část s GetComponent v metodě Update, je to značné zpomalení. Takovou komponentu stačí získat jen jednou, proto je lepší si vytvořit proměnnou například Rigidbody2D rigid = null; už před metodou Start, to znamená, že to bude proměnná třídy, řekněme globální. Do metody Start pak stačí přidat řádek, který vytvořenou proměnnou naplní.
rigid = GetComponent<Ri­gidbody2D>();

Když video otevřeš na YouTube, uvidíš, jak to má vypadat, už se na to ptalo několik lidí :-)

Odpovědět 10.12.2015 19:05
Hlavou teď neprorazíš, ale stojí za to to zkoušet :)
Avatar
Matěj Machotka:

Díky za rady, chyba byla v kódu, zapomněl jsem na 2D a odkazoval jsem na GetComponent<Ri­gidbody>();
Teď mi Unity hlásí Assets/Scripts/Pla­yerMove1.cs(24,32): error CS1525: Unexpected symbol `<internal>'. Kód jsem celý přepsal, ale pořád stejný error. Přikládám zdroják, díky za jakoukoli pomoc.

using UnityEngine;
using System.Collections;

public class PlayerMoveScript : MonoBehaviour
{

    float flapAmount = 10;
    public float speed = 150;
    bool android;
    Rigidbody2D rigid = null;

    void Start()
    {
        // bool android
        if (Application.platform == RuntimePlatform.Android)
            android = true;
        else
            android = false;
    }

    void Update()
    {
        rigid = GetComponent<Rigidbody2D>(); //do rigid si ukladam Rigidbody2D
        Vector3 vel = rigid.velocity;


        if (!android)
        {
            if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))
            {
                vel = Flap(vel); //vel = Flap(Vector2 v)
            }
        }
        else
        {
            if (Input.touches.Length > 0)
            {
                vel = Flap(vel); //vel = Flap(Vector2 v)
            }
        }

        vel.x = speed * Time.deltaTime; // pohyb vpred

        rigid.velocity = vel; // vel ulozim do rigid
    }

    Vector3 Flap(Vector3 v) // flap o flapAmount
    {
        v.y = flapAmount;
        return v;
    }

}
Odpovědět 13.12.2015 17:13
Hranice mezi šíleností a genialitou je malá, ale každý nápad se zdá být zezačátku šíleností.
Avatar
vratislavino
Redaktor
Avatar
Odpovídá na Matěj Machotka
vratislavino:

Ahoj, když přečteš chybu, zjistíš, že chyba je v souboru PlayerMove1.cs, takže pravděpodobně pracuješ se špatným souborem, Unity si překládá všechny skripty, projdi si Assets a smaž soubor PlayerMove1.cs

Odpovědět 13.12.2015 17:39
Hlavou teď neprorazíš, ale stojí za to to zkoušet :)
Avatar
Matěj Machotka:

Soubor jsem nenašel, tak jsem vymazal všechny scripty a vytvořil nový, jediný, se stejným kódem a jméno scriptu sedí s tím co je v componentu. Ale Unity mi stále píše stejnou chybu u scriptu který tam mám vložený. Assets/Scripts/Pla­yerMoveScript­.cs(22,32): error CS1525: Unexpected symbol `<internal>. Když chybu označím v VS tak se mi označí Rigidbody2D jak u deklarování proměnné:

Rigidbody2D rigid = null;

tak u:

rigid = GetComponent<Rigidbody2D>();

Moc díky za cokoli :)

Odpovědět 13.12.2015 19:18
Hranice mezi šíleností a genialitou je malá, ale každý nápad se zdá být zezačátku šíleností.
Avatar
Ladislav Gina:

Zdravím vás, tady všechny rad bych se vás tady zeptal všech. Chtěl bych si vytvořit svoji vlastní 2D hru. Problem je v tom ze Jsem zacatecnik a neumim psat v Jave, poradil by ste mi někdo prosim co se mam naučit.. jakej program stahnou, koukal jsem tutorialy v unity3D ze se to da vytvorim v tom programu. Možna moje požadavky jsou složite, jde mi o obycejnou skakačku, a nějake další vlastností aby uměla figurka. Prosim o radu.

 
Odpovědět 10. března 22:31
Avatar
hhoker
Člen
Avatar
hhoker:

Ahoj, jsem začátečník, proto budou moje otázky trochu vlažné. Jakým způsobem mohu hru pustit pokud nemám k dispozici telefon s androidem? Ve visual studiu mám Android emulator, ale nevím jak pustím .apk soubor. A lze udělat tu samou hru se stejným kódem i pro iOS? Díky

 
Odpovědět 9. srpna 12:19
Avatar
John Sníh
Člen
Avatar
John Sníh:

Nevim proč, ale když jsem to nahrál do mobilu tak dotyk na obrazovku nefungoval. koule ubec nereagovala. A To jsem opsal přesně podle tvého kódu + s opravou Vector3 vel = GetComponent<Ri­gidbody2D> ().velocity;
A v počítači zase nereagovala myš :-(

 
Odpovědět 21. srpna 16:00
Avatar
John Sníh
Člen
Avatar
Odpovídá na Ladislav Gina
John Sníh:

Ladislav Gina: Pokud Ti mohu poradit ze svých začátečnických zkušeností tak se nauč tady ze stránek základy java kodu a zaklady OOP java. java je nejvyžívanější programovací jazyk. Určitě než přejdeš na Unity což je nejlepší možnost pro vyvíjení her na android se tyhle základy nauč.

 
Odpovědět 21. srpna 19:06
Avatar
John Sníh
Člen
Avatar
John Sníh:

Dobrý už to funguje :-)

 
Odpovědět 22. srpna 15:27
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 19. Zobrazit vše