.[ ČeskéHry.cz ].
Unity - chyba pri zdielani hodnot medzi skriptami
Jdi na stránku 1, 2  Další
 
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
sacmoo



Založen: 18. 11. 2014
Příspěvky: 69

PříspěvekZaslal: 17. únor 2015, 20:23:21    Předmět: Unity - chyba pri zdielani hodnot medzi skriptami Odpovědět s citátem

Pise mi to takuto chybu: NullReferenceException: Object reference not set to an instance of an object
Hladal som aj riesenie na nete,ale ani jedno z tych co som nasiel mi nefungovalo

using UnityEngine;
using System.Collections;

public class Cas : MonoBehaviour {

Ciel cielCas;
int minuty = 0;
public float sekundy;
int velkPisma = 18;

void Start ()
{
cielCas = GetComponent (typeof (Ciel)) as Ciel;
}

void Update ()
{
sekundy += Time.deltaTime;

if (sekundy > 60)
{
minuty++;
sekundy = 0;
}
//na tomto riadku mi pise chybu
cielCas.cielSek = sekundy;
}


void OnGUI ()
{
GUI.skin.box.fontSize = velkPisma;
GUI.Box(new Rect(Screen.width-250, 10, 150, 40),"Cas: "+ string.Format("{0:00}",minuty) + ":" + string.Format("{0:00.00}",sekundy));
}
}


using UnityEngine;
using System.Collections;
public class Ciel : MonoBehaviour {

public float cielMin = 0;
public float cielSek = 0;

void OnTriggerEnter (Collider auto)
{
if(auto.CompareTag("Player"))
Debug.Log("vypis");
}


}
Vedel by mi niekto poradit?
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: 17. únor 2015, 20:45:50    Předmět: Odpovědět s citátem

1) Máš na tom GameObjectu ten skript Ciel vůbec přidaný v editoru?

2) Jsi si jistý, že chceš získat Component a ne přímo ten Script? Zkus to takhle:
kód:
cielCas = GetComponent<Ciel>();


Tady je popsaný ten rozdíl: http://answers.unity3d.com/questions/55331/differences-generic-getcomponentscript-vs-getcompo.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
sacmoo



Založen: 18. 11. 2014
Příspěvky: 69

PříspěvekZaslal: 17. únor 2015, 21:11:43    Předmět: Odpovědět s citátem

Henten prikaz som uz skusal,ale pise tu istu chybu. A mam obidva priradene skripy. Cas mam priradeny do main camera a Ciel mam priradeny do box collider
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
abuki



Založen: 31. 07. 2012
Příspěvky: 507
Bydliště: Praha

PříspěvekZaslal: 17. únor 2015, 21:46:13    Předmět: Odpovědět s citátem

na ten cielCas je prostě špatná reference.

- máč tam dva objekty? Pokud ano, tak to
cielCas = GetComponent (typeof (Ciel)) as Ciel;
funguje jen na stejném objektu, máš-li to tedy na jiném, nebude to fungovat

- jednoduší řešení:

public class Cas : MonoBehaviour {

public Ciel cielCas; //když bude public, můžeš pak referenci přiřadit ručně v editoru a nemusíš pak používat GetComponent, už to bude rovnou přiřazené
_________________
Twitter @abukac
www.amanita-design.net
www.circusatos.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Spytihněv



Založen: 05. 04. 2011
Příspěvky: 547
Bydliště: Praha

PříspěvekZaslal: 17. únor 2015, 22:09:38    Předmět: Odpovědět s citátem

kód:
sekundy += Time.deltaTime;

 if (sekundy > 60)
 {
 minuty++;
 sekundy = 0;
 }


Tady jsou dvě chyby, které však s původním problémem nesouvisí Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sacmoo



Založen: 18. 11. 2014
Příspěvky: 69

PříspěvekZaslal: 17. únor 2015, 22:09:46    Předmět: Odpovědět s citátem

Diky moc uz to ide. nevedel som, ze GetComponent funguje iba v ramci jedneho objektu a ze ked mam viacej objektov, ze sa to takto riesi . Diky moc Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sacmoo



Založen: 18. 11. 2014
Příspěvky: 69

PříspěvekZaslal: 17. únor 2015, 22:12:15    Předmět: Odpovědět s citátem

Spytihněv napsal:
kód:
sekundy += Time.deltaTime;

 if (sekundy > 60)
 {
 minuty++;
 sekundy = 0;
 }


Tady jsou dvě chyby, které však s původním problémem nesouvisí Wink

A aky je tam problem ? ved hentom mi funguje spravne
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 17. únor 2015, 22:18:07    Předmět: Odpovědět s citátem

sekundy += Time.deltaTime;

while (sekundy > 60)
{
minuty++;
sekundy -= 60;
}

Ale možná měl Spytihněv namysli něco jiného ještě.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
sacmoo



Založen: 18. 11. 2014
Příspěvky: 69

PříspěvekZaslal: 17. únor 2015, 22:21:10    Předmět: Odpovědět s citátem

Houp napsal:
sekundy += Time.deltaTime;

while (sekundy > 60)
{
minuty++;
sekundy -= 60;
}

Ale možná měl Spytihněv namysli něco jiného ještě.


A aky je problem v mojom rieseni?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 608

PříspěvekZaslal: 17. únor 2015, 23:02:22    Předmět: Odpovědět s citátem

Houp napsal:
sekundy += Time.deltaTime;

while (sekundy > 60)
{
minuty++;
sekundy -= 60;
}

Když už tu máme koutek hnidopichů Smile Co takhle while (sekundy >= 60)? Smile Pokud ovšem nepočítáš s leap seconds v UTC.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



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

PříspěvekZaslal: 17. únor 2015, 23:21:48    Předmět: Odpovědět s citátem

kód:
TimeSpan.FromSeconds(Time.time - startTime).ToString("mm:ss");
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, 08:15:16    Předmět: Odpovědět s citátem

mar: +1

sacmoo: že můžeš mít sekundy např. 60,33, tvůj if projde, zvýší minutu a sekundy jen vynuluje. Tím hru zpomalíš o 1/3 sekundy.

Houp: ten while tam typicky potřeba není, záleží na nastavení projektu a jeho časovače, v unity je možné pro Update definovat maximální krok pro deltaTime, který je ve výchozím stavu myslím právě 0,33 s. Naopak to co píše Radis by mu takové problémy přidělalo, musel by najednou řešit pauzování hry, aktivitu v pozadí, změnu timeScale atd.
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, 09:01:52    Předmět: Odpovědět s citátem

Mem: Jadro meho prispevku spocivalo v prevodu sekund na minuty a sekundy + spravne formatovani (viz OnGUI v prvnim prispevku OP Smile)... Mit na to dve vlastni pocitadla snad opravdu neni potreba Rolling Eyes

Samozrejme az bude OP resit nejake pauzovani (jine nez Time.timeScale = 0), tak muze jako parametr pouzit svoje pocitadlo sekund, ale to nic nemeni na tom, ze staci pocitat JEN sekundy. To je snad zrejme.
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, 09:22:18    Předmět: Odpovědět s citátem

Radis: Mně šlo o to, že deltaTime v update nemusí odpovídat reálnému času. Tj. hra se na chvíli sekne, nebo nestíhá, takže deltaTime udává maximální povolený krok třeba 1/3 sekundy, zatímco reálně mezi framy uplynula sekunda.

Teď se ale dívám, že Time.time udává právě tenhle herní čas, tj. součet deltaTime, takže to je v pořádku a větší rozdíl tam nevznikne. Původně jsem totiž měl za to, že ukazuješ rozdíl reálného času, ale to by byl Time.realtimeSinceStartup.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
sacmoo



Založen: 18. 11. 2014
Příspěvky: 69

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

Mem napsal:
mar: +1

sacmoo: že můžeš mít sekundy např. 60,33, tvůj if projde, zvýší minutu a sekundy jen vynuluje. Tím hru zpomalíš o 1/3 sekundy.

Houp: ten while tam typicky potřeba není, záleží na nastavení projektu a jeho časovače, v unity je možné pro Update definovat maximální krok pro deltaTime, který je ve výchozím stavu myslím právě 0,33 s. Naopak to co píše Radis by mu takové problémy přidělalo, musel by najednou řešit pauzování hry, aktivitu v pozadí, změnu timeScale atd.


Aha jasne Smile toto som prehliadol. dik .
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 1, 2  Další
Strana 1 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