Начал учится работать в Unity3D по обучающему видео и в нем был код (который не заработал):
if (Input.GetKeyDown(KeyCode.W))
rigidbody.velocity.y = 8;
Полазив по интернету и попробовав несколько вариантов у меня все заработало, только когда я заменил код на такой:
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKeyDown(KeyCode.W))
rb.velocity = new Vector3(0, 8, 0);
Почему вместо этого не работает первый вариант, или вариант:
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKeyDown(KeyCode.W))
rb.velocity.y = 8;
Потому что время бежит, всё меняется. И если раньше в старых версиях программного продукта можно было писать одни конструкции, то в поздних версиях что-то меняется на другие.
Так, к примеру rigidbody.velocity (а еще audio, renderer, collider и многое другое) можно было писать в Unity версии № 4. С 5 версии все происходит через вызов нужных компонентов через GetComponent<SOME_COMPONENT>(); в C# и GetComponent(SOME_COMPONENT); в JS
Аналогично с velocity.y. Возможно раньше можно было так писать, однако сейчас присваивание направления или скорости или все, что связанно с Vector3 (и не только вектор) происходит цельно, т.е. через вызов new Vector3(0, 8, 0)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей