Android

Что не так с кодом? Unity

Причем я копируют скрипт со старого видео урока и пунктуационных ошибок не делаю.
Вот такие вот ошибки выдает:
NullReferenceException: Object reference not set to an instance of an object
Player.Start () (at Assets/Scripts/Player.cs:36)

NullReferenceException: Object reference not set to an instance of an object
Player.GetDamageShield ( System.Int 32 damage) (at Assets/Scripts/Player.cs:55)
Bullet.OnTriggerEnter2D (UnityEngine.Collider2D coll) (at Assets/Scripts/Bullet.cs:27)
NullReferenceException: Object reference not set to an instance of an object
Player.GetDamage ( System.Int 32 damage) (at Assets/Scripts/Player.cs:68)
Bullet.OnTriggerEnter2D (UnityEngine.Collider2D coll) (at Assets/Scripts/Bullet.cs:18)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
public static Player instance = null;

public int player_Health = 1;
public GameObject obj_Shield;
public int shield_Health = 1;

// Reference private to the UI's health bar.
private Slider _slider_hp_Player;
// Reference private to the UI's shield bar.
private Slider _slider_hp_Shield;



private void Awake()
{
if (instance == null)
{
instance = this;
}
else
{
Destroy(gameObject);
}
_slider_hp_Player = GameObject.FindGameObjectWithTag("sl_HP").GetComponent<Slider>();
_slider_hp_Shield = GameObject.FindGameObjectWithTag("sl_Shield").GetComponent<Slider>();
}

private void Start()
{
_slider_hp_Player.value = (float)player_Health / 10;

if (shield_Health != 0)
{
obj_Shield.SetActive(true);
_slider_hp_Shield.value = (float)shield_Health / 10;
}
else
{
obj_Shield.SetActive(false);
_slider_hp_Shield.value = 0;
}


}
public void GetDamageShield(int damage)
{
shield_Health -= damage;

_slider_hp_Shield.value = (float)shield_Health / 10;

if (shield_Health <= 0)
{
obj_Shield.SetActive(false);
}
}


public void GetDamage(int damage)
{
player_Health -= damage;

_slider_hp_Player.value = (float)player_Health / 10;

if (player_Health <= 0)
{
Destruction();
}
}
void Destruction()
{
Destroy(gameObject);
}
}
Ошибки NullReferenceException: Object reference not set to an instance of an object возникают, когда вы пытаетесь обратиться к переменной ссылки, которая не ссылается ни на какой объект. Если переменная ссылки не ссылается на объект, то она будет обрабатываться как null. Время выполнения сообщит вам, что вы пытаетесь получить доступ к объекту, когда переменная равна null, выдавая NullReferenceException.

В вашем коде ошибка NullReferenceException: Object reference not set to an instance of an object возникает в трех местах:

Player.Start () (at Assets/Scripts/Player.cs:36)
Player.GetDamageShield ( System.Int 32 damage) (at Assets/Scripts/Player.cs:55)
Player.GetDamage ( System.Int 32 damage) (at Assets/Scripts/Player.cs:68)
Одна из причин может быть в том, что вы забыли установить значение для переменной перед ее использованием. Например, если вы используете переменную, которая должна быть инициализирована в Инспекторе Unity. Ваш код не содержит строки 55 и 68, поэтому я не могу точно сказать, что вызывает ошибку в этих строках. Однако в строке 36 вы обращаетесь к _slider_hp_Player.value, и если _slider_hp_Player равен null, это вызовет ошибку NullReferenceException. Вы можете проверить это, добавив проверку на null перед обращением к этой переменной. Например:
 if (_slider_hp_Player != null) 
{
_slider_hp_Player.value = (float)player_Health / 10;
}
else
{
Debug.Log("_slider_hp_Player is null");
}
Также убедитесь, что вы правильно установили значение для _slider_hp_Player и _slider_hp_Shield в методе Awake(). Они должны ссылаться на соответствующие компоненты Slider в вашей сцене. Если эти компоненты отсутствуют или имеют неправильные теги, это может привести к ошибке NullReferenceException. Вы можете проверить это, добавив проверку на null после попытки получения компонентов:
 _slider_hp_Player = GameObject.FindGameObjectWithTag("sl_HP").GetComponent(); 
if (_slider_hp_Player == null)
{
Debug.Log("Failed to find sl_HP Slider");
}

_slider_hp_Shield = GameObject.FindGameObjectWithTag("sl_Shield").GetComponent();
if (_slider_hp_Shield == null)
{
Debug.Log("Failed to find sl_Shield Slider");
}
Владимир Чащин
Владимир Чащин
25 860
Лучший ответ
это значит что надо поставить в компьютер rtx 4090 ti и все зарабтает
**
**** ****
97