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
Futtasd le ezt visual studio-ban és meg fogsz lepődni:
namespace ConsoleApplicationRef
{
class C { public int i; }
struct S { public int i; }
class Program
{
static void fnc(C c) { c.i = 2; }
static void fns(S s) { s.i = 2; }
static void fnsr(ref S s) { s.i = 2; }
static void Main(string[] args)
{
var c = new C();
c.i = 1;
var s1 = new S();
s1.i = 1;
var s2 = new S();
s2.i = 1;
fnc(c);
fns(s1);
fnsr(ref s2);
Console.WriteLine(c.i);
Console.WriteLine(s1.i);
Console.WriteLine(s2.i);
Console.ReadKey();
}
}
}
Vagy ezt:
namespace ConsoleApplicationRef
{
class C { public int i; }
class Program
{
static void fnc(C c) { c.i = 2; }
static C cret(C c) { return c; }
static void Main(string[] args)
{
var c = new C();
c.i = 1;
var cc = c;
var cr = cret(cret(cret(cret(cc))));
var l = new List<C>();
l.Add(c);
fnc(c);
Console.WriteLine(c.i);
Console.WriteLine(cc.i);
Console.WriteLine(l[0].i);
Console.WriteLine(cr.i);
Console.ReadKey();
}
}
}
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!