Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – 6. diel - Unity (C #) Android: Pohyb, grafika, particles

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
vratislavino
Tvůrce
Avatar
Odpovedá 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í :-)

Odpovedať
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;
    }

}
Odpovedať
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
Odpovedá 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

Odpovedať
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 :)

Odpovedať
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.

 
Odpovedať
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

 
Odpovedať
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š :-(

 
Odpovedať
21.8.2016 16:00
Avatar
John Sníh
Člen
Avatar
Odpovedá 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č.

 
Odpovedať
21.8.2016 19:06
Avatar
John Sníh
Člen
Avatar
John Sníh:22.8.2016 15:27

Dobrý už to funguje :-)

 
Odpovedať
22.8.2016 15:27
Avatar
Viktor Abel
Člen
Avatar
Odpovedá 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 :)

 
Odpovedať
28.1.2017 22:34
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 23.