.[ ČeskéHry.cz ].
Unity - chyba pri zdielani hodnot medzi skriptami
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 18. únor 2015, 09:41:32    Předmět: Odpovědět s citátem

Mem: Nene, ten limit v nastaveni (Maximum Allowed Timestep) je jen pro fyziku (FixedUpdate). Volani Time.deltaTime v Update() ti vrati presne tolik, kolik trval predchozi frame, neni tam zadny limit.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 18. únor 2015, 10:39:54    Předmět: Odpovědět s citátem

Radis: Nenene Wink, má vliv na plovoucí update, věř mi. Pro fyziku máš přeci fixní krok. Pro FireLords jsem si kdysi psal vlastní systém pro maximální krok a pak zjistil, že to Unity má zabudované.

Důkaz místo slibů, na scéně mám objekt a skript, který pomocí matematického výpočtu blokne na mém i5 každý frame na 2-3 sekundy:

kód:
   void Update ()
    {
        float x = 0;
        for (int i = 0; i < 100000000; i++)
        {
            x *= Mathf.Sqrt(i / Mathf.PI);
        }
   }

    void OnGUI()
    {
        GUI.Label(new Rect(0, 0, 100, 20), Time.time.ToString());
        GUI.Label(new Rect(0, 20, 100, 20), Time.deltaTime.ToString());
    }


V OnGUI vykresluji Time.Time a pod ním Time.deltaTime. Zatímco v reálném čase uběhlo přes 10 sekund, v playeru vidím, jak to každé 2-3 sekundy cukne a vykreslí se tyhle hodnoty:



V Project settings/Time mám výchozí hodnoty:

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 18. únor 2015, 10:51:24    Předmět: Odpovědět s citátem

Jinak tohle chování může mít samozřejmě i nečekané negativní efekty. Např. v DarkHuntu nám level trvá přesně 60 sekund, po které hraje na pozadí hudba. Indikovalo se to graficky a taky s tím počítal engine. Ale když rendering nestíhal (na starých Tegra2 tabletech můj shader pro svítilnu zpomaloval tak na 18-20 fps s výkyvy), deltaTime občas dosahoval nastaveného maxima. Výsledek byl, že celá hra byla zpomalená, hudba dohrála, a level pokračoval dál. Nakonec jsme to vyřešili přechodem na reálný čas a jeho ručním pauzováním (resetováním). Každopádně nejjednodušší je řešit to fyzikou ve fixním kroku a víc se nestarat...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 18. únor 2015, 11:03:20    Předmět: Odpovědět s citátem

Jj, pro fyziku je fixni krok, ale myslel jsem, ze ten maximum allowed timestep proste jen omezuje kolik FixedUpdates se maximalne provede v jednom vizualnim framu a ze na max. hodnotu Time.deltaTime to nema vliv.

Ale mas samozrejme pravdu, diky za info. Clovek se porad uci Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna