-1

我想做一个杀戮计数器,但由于某种原因它不起作用。 这是我所做 的我创建了一个新的空游戏对象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
            
        }
            
    }
}
4

1 回答 1

2

问题出在您的kills_score参考上,如果您这样做:

kills_score = GetComponent<Score>();

您正在搜索您的Score组件BulletCollision,我猜它没有Score组件,因为它是子弹。

快速解决:

附加到您GameManager的新TAG“GameManager”,然后使用

kills_score = GameObject.FindWithTag("GameManager").GetComponent<Score>();

代替

kills_score = GetComponent<Score>();

为了快速验证这一点,让您的分数可变public,并在您的编辑器中查看参考是否正确设置。

另外,作为旁注,请尝试使用 lowerCamelCame 命名法来维护您的变量,这意味着以小写字母开头。

于 2020-08-20T09:54:56.573 回答