Страница 1 из 1

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

СообщениеДобавлено: 03 авг 2023, 20:46
Agness_Rudolf
создаю 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

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

СообщениеДобавлено: 03 авг 2023, 20:52
1max1
transform.Find работает только с локальной иерархией, то есть ищет только в детях текущего transform. Если объект в другом месте, то сначала надо найти его через GameObject.Find либо указать в инспекторе.
https://docs.unity3d.com/ScriptReferenc ... .Find.html

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

СообщениеДобавлено: 03 авг 2023, 20:56
Alkos26Rus
Синтаксис:
Используется csharp
transform.Find("Robot_Canvas").Find("HealthBar").GetComponent<Slider>();

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

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

СообщениеДобавлено: 03 авг 2023, 23:19
1max1
Alkos26Rus писал(а):
Синтаксис:
Используется csharp
transform.Find("Robot_Canvas").Find("HealthBar").GetComponent<Slider>();

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

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

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

СообщениеДобавлено: 04 авг 2023, 00:53
Alkos26Rus
1max1 писал(а):Можно искать и через путь, типа "ololo/kek/cheburek", в доках есть пример.

Точно, не знал)