Ich brauche Hilfe beim Verständnis der Variablenzuweisung mit der C# -Sprache.Variablenzuordnung und Unity
Beim Scripten mit Monodevelop for Unity weise ich unter anderem RigidBody- und Collider-Komponenten von Spielobjekten lokalen Variablen zu. Wenn ich diese Variablen entweder durch Aufruf ihrer Methoden oder durch Änderung ihrer Attribute ändere, spiegeln sich diese Änderungen in den ursprünglichen Komponenten wider. Um klarer meinen Punkt Ich werde diesen Pseudo-Code unten verlassen:
void someMethod(Rigidbody rb)
{
Rigidbody localRigidBody;
localRigidBody = rb; //assigned external rb component to local rigidBody
localRigidBody.velocity = 10.0f; //changes are reflected in the original rb object!
}
Was ich verwirrt sind die Veränderungen im Spielobjekt, das die rb Rigibody Komponente „enthält“. Während ich weiß, dass dies funktioniert, sollte es nicht funktionieren, da localRigidBody eine lokale Variable ist und die Änderung der Geschwindigkeit von localRigidBody den Geschwindigkeitswert von rb nicht ändern sollte. Aber es ändert sich und es funktioniert, da das Objekt mit der rb-Komponente seine Geschwindigkeit ändert, wenn ich mein Programm starte. Kannst du mir erklären warum?
Bitte informieren Sie mich, wenn meine Frage nicht geklärt ist und ich versuchen werde, mich besser auszudrücken.
Vielen Dank.
Denken einer Variablen als Zeiger beginnen. Der Speicher enthält die Felder und Eigenschaften der Instanz. Wenn Sie 2 Variablen haben und Sie 'a' zu' b' zuweisen, müssen Sie nur die Zeiger auf den gleichen Speicherbereich setzen. Wenn Sie also den Speicher ändern, auf den beide zeigen, haben beide denselben neuen Wert. –
@RB also sind alle Variablen in C# Zeiger? Vielen Dank für Ihre Antwort. – Dayman75
Ihr 'localRigidBody' wird in diesem Fall eine Referenz auf diesen Starrkörper sein, keine Kopie. Neben einigen Caching-Sachen kann dies als eine Art Lebensqualität angesehen werden, denn anstatt etwas wie "rb.AddForce" zu machen, müssten Sie sonst immer etwas wie "GameObject.FindWithTag (" Foo ") schreiben. GetComponent() .AddForce() '. –