Код Unity3d c# не работает, несмотря на то, что он скопирован из учебников, где он работал - PullRequest
0 голосов
/ 02 марта 2020

Сегодня я начал свое приключение с единства и хотел, чтобы объект двигался вперед, когда вы нажимаете «w». На удивление не работает, выскакивает ошибка. Я буквально скопировал код из учебника, и да, я добавил код как компонент объекта. Ниже приведен код и сообщение об ошибке:

using UnityEngine;    
public class PlayerMovement : MonoBehaviour
{
    private Rigidbody rb;
    public float Force = 2000f;
    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.W))
        {
            rb.AddForce(0, 0, Force * Time.deltaTime );
        }
    }
}

Сообщение об ошибке: NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта PlayerMovement.FixedUpdate () (at Assets / PlayerMovement.cs: 14).

1 Ответ

2 голосов
/ 02 марта 2020

Основная проблема и первоначальное решение

Жесткое тело автоматически не захватывается скриптами. Вы должны вызвать GetComponent и назначить Rigidbody для поля, чтобы использовать его. Обычно это делается методом Awake:

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

Альтернатива:

Вы также можете выставить свое поле rb в инспекторе, пометив его как publi c или добавление атрибута [SerializeField]. Затем вы можете перетащить компонент Rigidbody в слот инспектора:

[SerializeField] private Rigidbody rb;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...