Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
sacmoo
Založen: 18. 11. 2014 Příspěvky: 69
|
Zaslal: 17. únor 2015, 20:23:21 Předmět: Unity - chyba pri zdielani hodnot medzi skriptami |
|
|
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
|
Návrat nahoru |
|
|
sacmoo
Založen: 18. 11. 2014 Příspěvky: 69
|
Zaslal: 17. únor 2015, 21:11:43 Předmět: |
|
|
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 |
|
|
abuki
Založen: 31. 07. 2012 Příspěvky: 507 Bydliště: Praha
|
Zaslal: 17. únor 2015, 21:46:13 Předmět: |
|
|
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 |
|
|
Spytihněv
Založen: 05. 04. 2011 Příspěvky: 547 Bydliště: Praha
|
Zaslal: 17. únor 2015, 22:09:38 Předmět: |
|
|
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í |
|
Návrat nahoru |
|
|
sacmoo
Založen: 18. 11. 2014 Příspěvky: 69
|
Zaslal: 17. únor 2015, 22:09:46 Předmět: |
|
|
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 |
|
Návrat nahoru |
|
|
sacmoo
Založen: 18. 11. 2014 Příspěvky: 69
|
Zaslal: 17. únor 2015, 22:12:15 Předmět: |
|
|
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í |
A aky je tam problem ? ved hentom mi funguje spravne |
|
Návrat nahoru |
|
|
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 17. únor 2015, 22:18:07 Předmět: |
|
|
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 |
|
|
sacmoo
Založen: 18. 11. 2014 Příspěvky: 69
|
Zaslal: 17. únor 2015, 22:21:10 Předmět: |
|
|
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 |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 17. únor 2015, 23:02:22 Předmět: |
|
|
Houp napsal: |
sekundy += Time.deltaTime;
while (sekundy > 60)
{
minuty++;
sekundy -= 60;
}
|
Když už tu máme koutek hnidopichů Co takhle while (sekundy >= 60)? Pokud ovšem nepočítáš s leap seconds v UTC. |
|
Návrat nahoru |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 17. únor 2015, 23:21:48 Předmět: |
|
|
kód: |
TimeSpan.FromSeconds(Time.time - startTime).ToString("mm:ss"); |
|
|
Návrat nahoru |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 18. únor 2015, 08:15:16 Předmět: |
|
|
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 |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 18. únor 2015, 09:01:52 Předmět: |
|
|
Mem: Jadro meho prispevku spocivalo v prevodu sekund na minuty a sekundy + spravne formatovani (viz OnGUI v prvnim prispevku OP )... Mit na to dve vlastni pocitadla snad opravdu neni potreba
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 18. únor 2015, 09:22:18 Předmět: |
|
|
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 |
|
|
sacmoo
Založen: 18. 11. 2014 Příspěvky: 69
|
Zaslal: 18. únor 2015, 09:29:45 Předmět: |
|
|
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 toto som prehliadol. dik . |
|
Návrat nahoru |
|
|
|