У меня есть игровой объект с именем Player , и к нему прикреплены два сценария.Сценарий Player прослушивает ввод и вызывает метод из второго сценария с именем LaserController .
Второй сценарий отвечает за создание экземпляра префаба с компонентом LineRenderer и управляет тем, каклиния нарисована, и это жизненный цикл.Этот префаб прикреплен к этому сценарию в иерархии.
Если я объединю эти сценарии в один класс, проблем не будет.Но то, как я их использую, вызывает эту ошибку:
NullReferenceException: Object reference not set to an instance of an object
Класс игрока
public class Player : MonoBehaviour
{
LaserController laserController;
void Update()
{
if (Input.GetMouseButton(0))
{
laserController.ShootLaserBeam(Input.mousePosition); // NullReferenceException is thrown
}
if (Input.GetMouseButtonUp(0))
{
laserController.RemoveLaserBeam();
}
}
}
Лазерный контроллер Classs
public class LaserController : MonoBehaviour
{
public GameObject laserPrefab;
public GameObject laserInstance;
public LineRenderer lineRenderer;
public EdgeCollider2D edgeCollider;
protected bool isBeamActive;
public void ShootLaserBeam(Vector3 mousePosition)
{
if (isBeamActive == false)
{
CreateLaser(mousePosition);
}
}
public void RemoveLaserBeam()
{
Destroy(edgeCollider);
Destroy(laserInstance);
isBeamActive = false;
}
private void CreateLaser(Vector3 mousePosition)
{
float turretY = transform.position.y;
Vector2 turret = new Vector2(0, turretY);
laserInstance = Instantiate(laserPrefab, Vector3.zero, Quaternion.identity);
lineRenderer = laserInstance.GetComponent<LineRenderer>();
edgeCollider = laserInstance.GetComponent<EdgeCollider2D>();
isBeamActive = true;
// do bunch of other things with the lineRenderer and Collider....
}
}
Если скрипт Controller был присоединен к другому объекту, я бы понял, почему существует ошибка ссылки, однако оба сценария прикреплены к одному и тому же объекту.Буду признателен, если кто-нибудь сможет указать, что мне здесь не хватает.