Unityben referenciát hol érdemes használni?
A netes tutorialoknál sehol se láttam, hogy referenciát használtak volna (csak ott, ahol változtatni akarnak az objektumon), pedig szerintem elég sok helyen sokkal jobb teljesítményű lenne a kód.
Például ha meghívom az A gameobjecten a B gameobject X fgv-jét, aminek egyik paramétere a forrás, vagyis az A gameobject. Én itt referenciát adnék át érték helyett, mert érték átadásnál meghívódnak konstruktorok. Bár ez kicsit nem világos, mert új object nem jön létre, ezért arra gondoltam, hogy csak egy virtuális megvalósítása jön létre az X függvényben az A objektben.
Szóval arra lennék kíváncsi, hogyha paraméterként átadjuk az A gameobject gameObject-jét, akkor most ott már alapból egy referenciát adunk át a gameObjectről?
Egy kis felvilágosítást szeretnék kérni, köszi :D
Vannak referencia ,èrtèk, ès pointer típusok c#ban.
C# programozàs lèpèsről lèpèsre töltsd le ezt a book ot és kezd elejètől. Most nincs időm leírni kicsot hosszú tèma. Majd kèsőbb leírom neked ide.
Félreértettetek. Mikor érdemes paraméterlistában referenciaként megnevezni valamit? (ref int valami)
Ha egy gameObjectet akarok átadni, és ahhoz hozzá akarok férni ott, ahova átadtam, akkor ref jelölés nélkül is hozzáférek, csak nem tudom, hogy ilyenkor hogy adódik át. C++-ban ugye az objektum átmásolódik, így nem érdemes érték szerinti paramétert használni e célból. Csak ugye nem tudom, hogy ha egy 3D-s világban lévő objectről beszélünk, akkor hogy másolódhatna át.
Szóval mi a különbség a fgv(gameObject), és az fgv(ref gameObject) között?
Ezért mondjuk, hogy nézd át az alapokat - abból megtudod, milyen típusok adódnak át referenciaként, és mely típusok adódnak át mint másolat :) (és ha arra jársz, nézd meg a különbséget pl a class és a struct között, és részben választ kapsz a kérdésedre).
De tényleg - ha nincsenek meg az alapok, nem fogsz tudni építkezni semmire.
fgv(gameObject) // Itt ha a gameobject referenciatípus,akkor egy olyan referenciát adsz át amivel elérheted a memórián keresztül a gameobjektet.
fgv(ref gameObject) // Itt pedig nem a gameobject referenciáját adod át hanem arra a memóriaterületre egy hivatkozást ahol közvetlen tárolódik a gameobject. Szal itt képes vagy arra,hogy ugyan arra a helyre létrehoz egy másik gameobjectet míg az első esetben ez nem lehetséges.
Olyan mintha c++ ban ezt írnád:
fgv(*gameobejct)
fgv(**gameobejct)
fgv(gameobejct) //mutatóban tárolt érték továbbadása.
fgv(&gameobject)//mutató változó címének a továbbadása.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!