Проблема с ссылками Unity
Вылезла ошибка и я не могу понять как решить ее
NullReferenceException: Object reference not set to an instance of an object PlayerController.OnEnable () (at Assets/Scripts/PlayerController.cs:39)
PlayerController.cs
private void OnEnable()
{
shootAction.performed += _ => ShootGun();
}
private void OnDisable()
{
shootAction.performed -= _ => ShootGun();
}
private void ShootGun()
{
RaycastHit hit;
GameObject bullet = GameObject.Instantiate(bulletPrefab, barrelTransform.position, Quaternion.identity, bulletParent);
BulletController bulletController = bullet.GetComponent<BulletController>();
if (Physics.Raycast(cameraTransform.position, cameraTransform.forward, out hit, Mathf.Infinity))
{
bulletController.target = hit.point;
bulletController.hit = true;
}
else
{
bulletController.target = cameraTransform.position + cameraTransform.forward * bulletHitMissDistance;
bulletController.hit = true;
}
}
BulletController.cs
public class BulletController : MonoBehaviour
{
[SerializeField] private GameObject bulletDecal;
private float speed = 50f;
private float timeToDestroy = 3f;
public Vector3 target { get; set; }
public bool hit { get; set; }
private void OnEnable()
{
Destroy(gameObject, timeToDestroy);
}
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
if (!hit && Vector3.Distance(transform.position, target) < .01f)
{
Destroy(gameObject);
}
}
private void OnCollisionEnter(Collision other)
{
ContactPoint contact = other.GetContact(0);
GameObject.Instantiate(bulletDecal, contact.point, Quaternion.LookRotation(contact.normal));
Destroy(gameObject);
}
}
Все ссылки вроде правильно указал в инспекторе Не понимаю в чем проблема.
Ответы (1 шт):
Автор решения: Mercyplus
→ Ссылка
Я решил свою проблему. переименовать метод Start() на Awake().
Если вспомнить порядок событий в Unity, то методы onEnable() выполняются перед методом Start(), в этом и была проблема. Поправьте меня, если я не правильно обозначил.