我需要一些幫助來理解使用C#語言進行變量賦值。變量賦值和Unity
在使用Monodevelop for Unity編寫腳本時,我將遊戲對象的RigidBody和Collider組件(等等)分配給局部變量。當我更改這些變量時,無論是通過調用它們的方法還是更改其屬性,這些更改都會反映在原始組件中。爲了讓我更清楚點,我會離開這個下面的僞代碼:
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!
}
什麼混淆了我在遊戲對象,「包含」 RB Rigibody成分的變化。雖然我知道這是有效的,但記住它不應該工作,因爲localRigidBody是一個局部變量,並且改變localRigidBody的速度不應該改變rb的速度值。然而,它會改變,它會起作用,因爲當我運行我的程序時,rb組件的對象會改變它的速度。你能解釋我爲什麼嗎?
請告訴我,如果我的問題沒有澄清,我會盡力表達自己。
謝謝。
覺得作爲一個指向內存的一部分。內存包含實例的字段和屬性。如果你有2個變量,並且把'a'分配給'b',你所做的只是將指針設置爲同一段內存。 因此,如果您更改了它們都指向的內存,它們將具有相同的新值。 –
@RB所以C#中的所有變量都是指針?謝謝您的回答。 – Dayman75
您的'localRigidBody'在這種情況下將是對該剛體的引用,而不是副本。除了一些緩存的東西等,這可以被看作是一些生活質量,因爲,而不是做'rb.AddForce'之類的東西,否則你總是必須寫一些像'GameObject.FindWithTag(「Foo」)。GetComponent() .AddForce()'。 –