Diskuze: Jak zavolat vector3 z třídy pole vectorů?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 11 zpráv z 11.
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.


Samozřejmě jsem napsal Vectors vector = new Vectors(); ale jak teď zavolat konkrétní Vector pomocí indexu?
public class Vectors {
List<Vector3> vectorArray = new List<Vector3>();
// v konstruktoru můžeš naplnit list vektory, nebo použít metodu níže pro přidání
public Vectors(){
vectorArray.Add(new Vector3(-0.46f, 0f, 0f));
...
...
...
}
/zisk vektoru na indexu
public Vector3 GetVectorAt (int index)
{
return vectorArray[index];
}
//přidani vektoru
public void AddVector (Vector3 v)
{
vectorArray.Add(v);
}
}
/////////////
A zavolání:
Vectors vectors = new Vectors();
//vektor na indexu 10
Vector3 v = vectors.GetVectorAt(10);
Ahoj. I když to potřebuji podle mého, díky tvé odpovědi jsem našel svou chybu. Už mi to jede. Moc díky.
Vectors vectors = new Vectors();
Vector3 vector = vectors.poleVectoru[1, 3];
Možná by ti mohla pomoct struktura <code>Matrix4x4</code>.
Psal jsem to nějak dlouho, předtím tu ještě nic nebylo.
Ale ještě mi nejde toto: Mám v = new Vector3(3.2f, 0.0f, 0.0f). Chtěl bych vector v použít k přesunu pozice. Jak se to má napsat ?
if (Input.GetKeyDown(KeyCode.UpArrow))
transform.Translate(new Vector3 (v.x, v.y, v.z));
if (Input.GetKeyDown(KeyCode.RightArrow))
transform.Translate(new Vector3(v));
if (Input.GetKeyDown(KeyCode.RightArrow))
transform.Translate(new Vector3(3.2f, 0.0f, 0.0f));
Funguje jen ta třetí varianta. Nemůžu na to přijít, jak místo konkrétních čísel dát proměnnou. Zkouším všemožné varianty.
Tak už mi to po mnoha hodinách jede. Dával jsem konstruktor do Start a snažil se vytvořit proměnnou v. A pak to v volat. Ale nefungovalo to. Asi pořád ještě něco nechápu. Nakonec jsem ho dal přímo do metody a bez vytvoření veřejné proměnné v.
if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.Translate(NovyVector(0, 1));
}
if (Input.GetKeyDown(KeyCode.RightArrow))
transform.Translate(new Vector3(3.2f, 0.0f, 0.0f));
}
public Vector3 NovyVector(int x, int y)
{
Vectors vector = new Vectors();
Vector3 v = vector.poleVectoru[x, y];
Debug.Log(v);
return v;
}
Neviaže sa to síce k pôvodnej téme vlákna, ale z tvojho posledného príspevku mám pocit, že problém bol u teba v pochopení tzv. scope-u (niečo ako rozsah, priestor) premennej.
class XClass
{
YClass memberVariable = new YClass();
void Method1()
{
YClass localVariable = new YClass();
// oba ďalšie riadky sú správne
localVariable.DoSomething();
memberVariable.DoSomething();
}
void Method2()
{
// compilation error, localVariable je lokálna premenná vytvorená v metóde Method1, mimo nej neexistuje
// localVariable.DoSomething();
// tento riadok je v poriadku, memberVariable nie je lokálna premenná a je prístupná v celej triede
memberVariable.DoSomething();
}
}
Nie som si poriadne istý, ktorý C# tutoriál na týchto stránkach to poriadne vysvetľuje, ale snáď ti bude rozdiel jasnejší aj z toho jednoduchého príkladu. Veľmi, veľmi zjednodušene sa dá povedať, že k premennej môžeme pristupovať "v tých zložených zátvorkách," v ktorých sme ju vytvorili (a vo všetkých, ktoré sú v nich zanorené hlbšie). Akonáhle program z tých zložených zátvoriek vyjde (napr. dokončí sa cyklus, dobehne metóda, zanikne inštancia), akákoľvek premenná, ktorá bola deklarovaná v tých zložených zátvorkách stráca platnosť (zaniká).
Ano. To byl přesně ten problém. Měl jsem představu, že když si někde v metodě vytvořím nějakou proměnnou, třeba "v", a umístím ji na začátek třídy, tak že k ní mám přístup z jakékoli jiné metody ve třídě. Prostě odkudkoli ze třídy. Pak mne to napadlo, tak jsem si všude dal Debug.Log a sledoval jsem, kde to načte hodnoty proměnné a kde ne, kde to napíše nuly. Tak jsem to pak pochopil. Proměnná se uchová pouze v té metodě, a dostanu se pak k ní přes volání té metody. Ještě je otázka, jestli jsem si to ještě nepopletl třeba s atributem nebo vlastnostmi. Musím se k tomu vrátit a znovu si to pročítat, co je co, a jak to funguje. Hlavně rozdíl mezi atributem a proměnnou. Mám pořád pocit, že je to to samé.
Ani takto to nejde. Je to špatně (zase se bavíme o Unity). Je to, jak jsem to popsal výše. Třída Player je v MonoBehaviour a třídu Vectors jsem nechal bez.
public class Player : MonoBehaviour
{
public object vector;
Vectors vector = new Vectors();
void Start()
{
}
public Vector3 NovyVector(int x, int y)
{
Vector3 v = vector.poleVectoru[x, y];
return v;
}
Zobrazeno 11 zpráv z 11.