Мне нужна помощь в понимании присвоения переменных с языком 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!
}
Что меня смущает, являются изменения в игровом объекте, который «содержит» ПУЭ Rigibody компонент. Хотя я знаю, что это работает, в виду это не должно работать, потому что localRigidBody является локальной переменной, а изменение скорости localRigidBody не должно изменять значение скорости rb. Но он изменяется, и он работает, поскольку объект с компонентом rb меняет свою скорость при запуске моей программы. Можете ли вы объяснить мне, почему?
Пожалуйста, сообщите мне, если мой вопрос не выяснен, и я постараюсь выразить себя лучше.
спасибо.
Думай переменной как указатель на область памяти. Память содержит поля и свойства экземпляра. Если у вас есть 2 переменные, и вы назначаете 'a'' b', все, что вы делаете, это установка указателей в один и тот же раздел памяти. Следовательно, если вы измените память, на которую они указывают, они оба будут иметь одно и то же новое значение. –
@RB, поэтому все переменные в C# являются указателями? Спасибо за ваш ответ. – Dayman75
Ваш 'localRigidBody' в этом случае будет ссылкой на это жесткое тело, а не на копию. Помимо некоторых кеширующих материалов и т. Д. Это можно рассматривать как некоторое качество жизни, потому что вместо того, чтобы делать что-то вроде 'rb.AddForce', вам всегда приходилось писать что-то вроде GameObject.FindWithTag (« Foo »). GetComponent() .AddForce() '. –