Как создать счетчик убийств в Unity2D с помощью C #?

#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, что означает, что она начинается со строчных букв.