@INROOM

Ошибка CS0120 на c# в unity, что не так?

Я только учись программировать на c# и сразу же столкнулся с проблемой.
Вроде всё делаю правильно, а работать не хочет1db86f92cf844def8e2f98dfb213c060.png.4460a3fde0a3415b9348a300f8c87f05.png
  • Вопрос задан
  • 3931 просмотр
Решения вопроса 3
@localghost
У вас пока нет объекта класса RigidBody2D. Есть только сам класс, читай: шаблон, чертеж. Вы пытаетесь узнать скорость автомобиля по его чертежу. Как вам подсказывает ошибка, это можно сделать только со статическими членами класса (то есть общими для всех его объектов. Скажем, количество колес, если это класс обычных легковых автомобилей :)), а velocity, что логично, non-static member.
Ответ написан
Комментировать
GavriKos
@GavriKos Куратор тега Unity
Вы можете взять velocity только у конкретно экземпляра класса Rigidbidy2D.

Пример. Есть тип мебели - шкаф. Шкафов - много. Но вам надо взять высоту не всех шкафов в мире, а одного конкретного шкафа. Так и тут. Rigidbody2D может быть много. Но вам нужен конкретный. Поэтому velocity не статический, и есть только у конкретного экземпляра.

Т.е. вам надо у вашего монобехейвиора найти Rigidbody2d, и у него брать велосити.

Например, так:
Rigidbody2D rigidbody = this.gameobject.GetComponent();
Vector2 velocity = rigidbody.velocity;

Это просто пример. Надо не забыть проверить на null, не делать GetComponent в апдейте. Можно вообще в инспекторе в объект положить его же Rigidbody...

Прежде чем писать игры - подучите язык...
Ответ написан
Комментировать
@Espleth
ИМХО рано за Unity взялся. Подучи C#, прочитай хотя-бы половину какой-нибудь книжки, чтобы иметь представление о языке и ООП, а уж потом берись за Unity.
Ну а саму проблему уже описали до меня.
Вот как все исправить - добавить этот код:
priate Rigidbody2D rb;

private void Awake()
{
    rb = GetComponent<Rigidbody2D>;
}

далее везде, где у тебя в коде написано Rigidbody2D поменять это на rb
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы