@KiberKrolik

Вопрос в чем проблема, почему мне выдает эту ошибку NullReferenceException: Ссылка на объект не указывает на экземпляр объекта Gun.Update() (в Asset?

Вот скрипт который выдает ошибку

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class Gun : MonoBehaviour
{



    public float offest;
    public Joystick joystick;

    public GameObject bullet;
    public Transform shotPoint;
    private float timeBtwShots;
    public float startTimeBtwShots;
    private float rotZ;
    private Vector3 difference;
    private Player player;
    
    private void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
        if(player.controlType == Player.ControlType.PC)
        {
            joystick.gameObject.SetActive(false);
        }
    }
    
    public void Update()   
    {
            if(player.controlType == Player.ControlType.PC)
        {
            difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
            rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
        }
            else if(player.controlType == Player.ControlType.Android)
        {
            rotZ = Mathf.Atan2(joystick.Vertical, joystick.Horizontal) * Mathf.Rad2Deg;
        }
        transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offest);
        
        if(timeBtwShots <= 0)
        {
            if(Input.GetMouseButton(0) && player.controlType == Player.ControlType.PC)
            {
                Shoot();
            }
            else if(player.controlType == Player.ControlType.Android)
            {
                if(joystick.Horizontal != 0 || joystick.Vertical != 0)
                {
                    Shoot();
                }
            }
    
    }
    else
    {
        timeBtwShots -= Time.deltaTime;
    }
    }
    public void Shoot()
    {
        Instantiate(bullet, shotPoint.position, transform.rotation);
        timeBtwShots = startTimeBtwShots;
    }

}
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
Denkuwus
@Denkuwus
15 y.o
Сообщение об ошибке «NullReferenceException: ссылка на объект не указывает на экземпляр объекта» указывает на то, что вы пытаетесь получить доступ к объекту или свойству объекта, который имеет значение null или не установлен.

В предоставленном вами сценарии есть несколько мест, где вы используете объект, не проверяя сначала, является ли он нулевым. Одним из примеров является следующая строка кода:

player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();


Здесь вы пытаетесь получить компонент Player игрового объекта с тегом «Player», но вы не проверяете, существует ли игровой объект или существует ли компонент Player. Если игровой объект с тегом Player не существует или существует, но не имеет присоединенного компонента Player, эта строка кода вызовет исключение NullReferenceException.

Чтобы исправить эту ошибку, вы должны убедиться, что объект или компонент, к которому вы пытаетесь получить доступ, не имеет значения null, прежде чем использовать его. Например, вы можете сделать что-то вроде этого:

GameObject playerGameObject = GameObject.FindGameObjectWithTag("Player");
if (playerGameObject != null)
{
    player = playerGameObject.GetComponent<Player>();
    if (player != null)
    {
        // если player не нулевой, вы можете использовать его здесь
    }
    else
    {
        // если player пуст, обработайте ошибку
    }
}
else
{
    // если playerGameObject имеет значение null, обработайте ошибку
}


Вы также должны проверять наличие нулевых значений при доступе к другим объектам или компонентам в вашем скрипте, таким как джойстик, пуля и точка выстрела.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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