Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Aktualizovali jsme provozní podmínky. Pokračováním užívání sítě s nimi projevíte souhlas.
BF extended 2022
Avatar
Miroslav Mazal:12.9.2018 0:24

Zdravím. Jak se pracuje v programu s časem? Už jsem to vyřešil vytvořením vlastního Timeru, takže tak vyřeším cokoli. Ale neexistuje nějaká jiná možnost pauzy v úkonu? V jednom tutoriálu jsem tady viděl Thread.Sleep, ale nevím jestli se dá používat kdykoli nebo jen v určitých situacích. A nejsou nějaké jiné možnosti, které mi unikly?

Zkusil jsem: Různé tutoriály a vlastní Timer.

Chci docílit: Zjistit jaké jsou možnosti práce s chvilkovými efekty.

 
Odpovědět
12.9.2018 0:24
Avatar
Luboš Běhounek Satik:12.9.2018 0:46

většinou se to řeší tak, že máš nějakou float proměnnou, která měří uplynulý čas a prostě do ní v každým updatu přičítáš uniťáckej Time.deltaTime

Případně se to ještě dá řešit přes coroutine .

Nahoru Odpovědět
12.9.2018 0:46
https://www.facebook.com/peasantsandcastles/
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Miroslav Mazal
Martin Petrovaj:12.9.2018 6:20

Ak chceš, aby nejaký efekt postupne prebiehal určitý čas (napr. postupné stmavovanie obrazovky počas 3 sekúnd), tak sa to dá jednoducho spraviť cez coroutine - tých nájdeš veľa použitých aj v oficiálnych Unity tutoriáloch. Tam si vieš samozrejme nastaviť aj rôzne vetvenie a hrať sa s tým (napr. po krokoch postupne stmavuj a ak je obrazovka už úplne čierna, počkaj sekundu a potom začni efekt postupne odstraňovať).

Keby si niekedy potreboval pracovať s časom od spustenia hry, tak cez triedu Time (najčastejšie vlastnosť Time.time).

Posledná rada, kým v programovaní nepokročíš dosť na to, aby si vedel čo je Thread a na čo sa používa, tak to nerob. Budeš mať značne menej problémov v živote, či už v Unity alebo v projektoch mimo neho. A aj keď viacvláknové programovanie zvládneš, Unity API nie je thread safe a engine si agresívne vynucuje, aby si takmer všetko držal v hlavnom vlákne (ak si tejto vete rozumel tak fajn, ak nie, nevadí).

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
12.9.2018 6:20
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Miroslav Mazal:12.9.2018 8:44

Asi rozumím. Taky se mi právě zdálo divné kvůli jednomu příkazu přidávat nahoře celou, teď nevím, jak se tomu říká

 
Nahoru Odpovědět
12.9.2018 8:44
Avatar
Miroslav Mazal:12.9.2018 13:43

Ještě jsem našel v poznámkách funkci Invoke.

 
Nahoru Odpovědět
12.9.2018 13:43
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Miroslav Mazal
Martin Petrovaj:12.9.2018 14:40

Invoke sa používa na to, keď chceš jednorazovo (per invoke call) vykonať nejakú metódu s daným časovým odstupom.

Fajn príklad je napr. to, keď v hre zničíš nepriateľa, prehrá sa nejaká animácia smrti / výbuchu / whatever a s tým, ako spustíš tú animáciu, tak zavoláš s časovým odstupom cez Invoke zničenie gameobjectu toho nepriateľa. V pseudokóde niečo ako

void Umri()
{
    animace.Prehraj();
    Invoke("Znic", animace.Delka);
}

void Znic()
{
    Destroy(this.gameObject);
}
Editováno 12.9.2018 14:41
Nahoru Odpovědět
12.9.2018 14:40
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Miroslav Mazal:12.9.2018 14:43

Jestli to chápu správně, tak to je to, co asi zrovna potřebuji. Generátor náhodných čísel v metodě Hod mi vygeneruje číslo hned, ale já bych ho potřeboval až po přehrání animace točení kostky. Aby se hráč nepohyboval dříve, než se kostka dotočí a ukáže uživateli číslo.

 
Nahoru Odpovědět
12.9.2018 14:43
Avatar
Odpovídá na Miroslav Mazal
Miroslav Mazal:12.9.2018 14:54

Ty jsi moje spása ;-)

 
Nahoru Odpovědět
12.9.2018 14:54
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 8 zpráv z 8.