Diskuze: [Unity 3D] Jak dostat metody z třídy získané přes MonoScript.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Pokud voláš čistě metodu GetComponent(), voláš ji na GameObject, ke kterému máš přiřazený tento script, je to stejné jako kdyby jsi napsal:
this.GetComponent<TvojeTrida>();
Aby jsi mohl volat metodu na skript, který je na jiném GameObjectu, nejprve si ho musíš uložit a pak z něj dostat skript:
GameObject target;
target.GetComponent<TvojeTrida>().OnDeath();
// nebo
TvojeTrida trida = target.GetComponent<TvojeTrida>();
trida.OnDeath();
Problém je v tom že ta "TvojeTrida" je nějaká třída... a já potřebuji zjistit jakou třídu tvoří proměnná typu MonoScript. Až budu mít referenci na tuto konkrétní třídu (jejíž typ je jiný, záleží na skriptu který v inspektoru přiřadím do veřejné proměnné) bude extrémně snadné na ní cokoliv volat. To co nazýváš <TvojeTrida> může být jakákoliv třída přiřazená v inspektoru... může to být cokoliv, třeba AsteroidController.cs nebo RocketController.cs problém je v tom že skript vlastně neví jaká třída to je a já nemůžu jednoduše napsat
GetComponent<SameClassAsInMonoScriptVariable>()
Už chápeš ? Problém není v tom dostat referenci na třídu, problém je v tom zjistit na jakou třídu mám dostat referenci.
Vyřešeno, použil jsem dědičnost. Třída targetController je nyní parrent všech ostatních controllerů což znamená že mohu napsat
GetComponent<targetController>()
...TargetCpntroller sice v daném objektu nebude ale za to tu bude jeho child což je pro získání reference dostačující.
Jasně... No, jestli jsou skripty AsteroidController a RocketController součástí prefabu, můžeš si vytvořit další třídu a pojmenovat ji třeba HealthManager. Tu budeš hledat pomocí GetComponent(). Zde si můžeš ukládat stav životů atp. Taky na ni budeš volat metodu OnDeath(), kde pak GameObject zničíš, nebo TakeDamage() pokud střely/údery nezabijí Asteroid či Rocket na jeden úder.
Pak je tu další možnost, že si žádnou třídu vytvářet nebudeš, ale budeš zjišťovat, jestli GameObject má daný skript:
if (target.GetComponent<AsteroidManager>() == null)
{
// gameobject nemá skript AsteroiManager
}
else if(target.GetComponent<RocketController>() == null)
{
// nemá ani RocketController
}
else
{
// zasáhl jsi něco jiného
}
Zobrazeno 6 zpráv z 6.