#c# #unity3d #unity-ui #topdown
#c# #unity3d #unity-пользовательский интерфейс #верхний
Вопрос:
Я хочу создать счетчик убийств, но по какой-то причине он не работает. Вот что я сделал Я создаю новый пустой GameObject Game Manager
и добавляю новый компонент Score
, Вот код:
using UnityEngine;
using UnityEngine.UI;
public class Score : MonoBehaviour
{
public Text kills_UI;
private int Kills_Counts; //How many kills
public void Increase_score() //This will update the UI text to the current kills count
{
Kills_Counts ;
kills_UI.text = Kills_Counts.ToString();
}
}
После этого я вызвал эту функцию во вражеском скрипте BulletColision
после того, как он был убит :
using UnityEngine;
public class BulletColision : MonoBehaviour
{
Score kills_score;
void Start()
{
kills_score = GetComponent<Score>();
}
public void OnCollisionEnter2D(Collision2D others) //When a bullet collide with en enemy prefab
{
if (others.gameObject.CompareTag("Enemy"))
{
Destroy(gameObject); //Destroy the enemy
kills_score.Increase_score(); //Calling the function from 'GameManager'
Destroy(others.gameObject); //Destroy the bullet
}
}
}
Ответ №1:
Проблема в вашей kills_score
ссылке, если вы:
kills_score = GetComponent<Score>();
Вы ищете Score
компонент на своем BulletCollision
, у которого, я полагаю, нет Score
компонента, поскольку это пуля.
Быстрое исправление:
Прикрепите к своему GameManager
новому TAG
типу «GameManager», затем используйте
kills_score = GameObject.FindWithTag("GameManager").GetComponent<Score>();
вместо
kills_score = GetComponent<Score>();
Чтобы быстро проверить это, создайте переменную score public
и посмотрите в своем редакторе, правильно ли установлена ссылка.
Кроме того, в качестве дополнительного примечания, старайтесь использовать в своих переменных номенклатуру lowerCamelCame, что означает, что она начинается со строчных букв.