Ошибка в консоли(Unity c# script)

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Ошибка в консоли(Unity c# script)

Сообщение Agness_Rudolf 03 авг 2023, 20:46

создаю 3d шутер, сделал полоску hp врагу, сделал это через transform.Find("тут путь на сам слайдер").GetComponent<Slider>();
но ошибка указывает на строчку: "healthBar.value = Hp;" говоря что я не сослался на объект:
NullReferenceException: Object reference not set to an instance of an object enemy_script.TakeDamage (System.Int32 _damage) (at Assets/enemy_script.cs:34) enemy_script.OnCollisionEnter (UnityEngine.Collision collision) (at Assets/enemy_script.cs:51) UnityEngine.Physics:OnSceneContact(PhysicsScene, IntPtr, Int32)
ну и вторая ошибка:NullReferenceException: Object reference not set to an instance of an object enemy_script.Start () (at Assets/enemy_script.cs:19)
сам скрипт выглядит так
using UnityEngine;
using UnityEngine.UI;

public class enemy_script : MonoBehaviour
{

public Animator animator;
private Slider healthBar;
public int Hp;




void Start()
{
healthBar = transform.Find("Robot_Canvas/HealthBar").GetComponent<Slider>();
healthBar.value = 100;

}



public void TakeDamage(int _damage)
{
Hp -= _damage;
healthBar.value = Hp;
if (Hp <= 0)
{
animator.SetTrigger("death");
healthBar.gameObject.SetActive(false);
GetComponent<enemyController>().enabled = false;GetComponent<Slider>().enabled = false;
}
else
{
animator.SetTrigger("damage");




}


}
public void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Bullet")
{
TakeDamage(10);
}

}

}
Пояснение:
1healthBar-переименованный slider
2 animator и все сопутствующие ему строчки можете не смотреть, так как оно используется для анимации и роли не играет
3 в функции TakeDamage урон я назвал _damage
4 enemyController это скрипт на движение врага на противника и он также не играет тут роли и упоминается в коде 1 раз
5 в стартовой функции я сразу поставил значение value на 100 потому что изначально его значение было 0 это значило что когда враг получал урон значение принималось после первого попадания 100 и получалось нелепо, тип сначало у врага 0 хп но как только было попадание сразу 100
Agness_Rudolf
UNец
 
Сообщения: 6
Зарегистрирован: 29 июл 2023, 12:29

Re: Ошибка в консоли(Unity c# script)

Сообщение 1max1 03 авг 2023, 20:52

transform.Find работает только с локальной иерархией, то есть ищет только в детях текущего transform. Если объект в другом месте, то сначала надо найти его через GameObject.Find либо указать в инспекторе.
https://docs.unity3d.com/ScriptReferenc ... .Find.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Ошибка в консоли(Unity c# script)

Сообщение Alkos26Rus 03 авг 2023, 20:56

Синтаксис:
Используется csharp
transform.Find("Robot_Canvas").Find("HealthBar").GetComponent<Slider>();

Не правильно ищешь. Надо типо того. Вобще научись дебажить код, иначе так по каждой ошибке будешь сюда писать
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Ошибка в консоли(Unity c# script)

Сообщение 1max1 03 авг 2023, 23:19

Alkos26Rus писал(а):
Синтаксис:
Используется csharp
transform.Find("Robot_Canvas").Find("HealthBar").GetComponent<Slider>();

Не правильно ищешь. Надо типо того. Вобще научись дебажить код, иначе так по каждой ошибке будешь сюда писать

Можно искать и через путь, типа "ololo/kek/cheburek", в доках есть пример.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Ошибка в консоли(Unity c# script)

Сообщение Alkos26Rus 04 авг 2023, 00:53

1max1 писал(а):Можно искать и через путь, типа "ololo/kek/cheburek", в доках есть пример.

Точно, не знал)
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 22