Переменная rb не существует в данном контексте

Переменная rb не существует в данном контексте, если написать перед rb слово public, то будет другая ошибка: Type or namespace defenition, or end-of-file expected. В первом случае ошибку вызывает строка rb.AddForce, а во втором фигурная скобка которая закрывает тело класса.

void Start()
{
    public Rigidbody2D rb = gameObject.GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
    RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.up);
    Debug.DrawRay(transform.position, Vector2.up*20, Color.white, 1, false);
    if(hit.distance <= 15)
    {
        rb.AddForce(transform.position - hit.transform.position);
    }
}

Ответы (1 шт):

Автор решения: NasIta Highborne

В данном примере идет попытка создания поля внутри метода, что, конечно же, непозволительно. Поля принадлежат классу, а не методу - методу принадлежат переменные.

Предлагаю вынести объявление поля в нужное ему место - над методом Start:

public Rigidbody2D rb;. А в самом методе оставить лишь присваивание:

rb = gameObject.GetComponent<Rigidbody2D>();

Тогда поле будет доступно в любом контексте: этого и других классов.

→ Ссылка