NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze – Lekce 2 - Unity (C#) Android: Pohyb, grafika, particles

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
vratislavino
Tvůrce
Avatar
Odpovídá na Matěj Machotka
vratislavino:10.12.2015 19:05

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:13.12.2015 17:13

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
Tvůrce
Avatar
Odpovídá na Matěj Machotka
vratislavino:13.12.2015 17:39

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:13.12.2015 19:18

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:10.3.2016 22:31

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.3.2016 22:31
Avatar
hhoker
Člen
Avatar
hhoker:9.8.2016 12:19

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.8.2016 12:19
Avatar
John Sníh
Člen
Avatar
John Sníh:21.8.2016 16:00

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.8.2016 16:00
Avatar
John Sníh
Člen
Avatar
Odpovídá na Ladislav Gina
John Sníh:21.8.2016 19:06

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.8.2016 19:06
Avatar
John Sníh
Člen
Avatar
John Sníh:22.8.2016 15:27

Dobrý už to funguje :-)

 
Odpovědět
22.8.2016 15:27
Avatar
Viktor Abel
Člen
Avatar
Odpovídá na Matěj Machotka
Viktor Abel:28.1.2017 22:34

Zkus smazat cely projekt v unity a vytvořit nový a vše napsat úplně znova. Mě to po výměně příkazu "Vector3 vel = rigidbody2D.ve­locity;" za "Vector3 vel = GetComponent<Ri­gidbody2D>().ve­locity;" jede úplně v pohodě... Měl jsem akorát problém že (Vector3 vel = GetComponent<Ri­gidbody2D>().ve­locity;) tento řádek jsem vložil přes ctrl+c z webu a ve visualu studiu ok, ale v unity to psalo v náhledu "Vector3 vel = GetComponent<Ri-gidbody2D>().ve­locity;" Dlouho jsem to řešil a pak jsem to Rigidbody2D přepsal ve visualu ručne a už je to bez pomlčky i v unity :)

 
Odpovědět
28.1.2017 22:34
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 23.