Во-первых, не звоните GameObject.Find
или GetComponent
часто, как в Update
, поскольку это дорогостоящие операции. Вместо этого вызывайте их как можно несколько раз (например, вызывая их один раз в Start
) и кешируйте результат.
Кроме того, ваш счетчик убийств обязательно должен быть целым числом, если у вас нет очень веская причина, по которой этого не должно быть.
Кроме того, когда вы вызываете Destroy(gameObject)
, вы в основном избавляетесь от всех значений в полях компонента. - Значит, вам следует хранить счетчик убийств в другом месте. Вы можете использовать для этого синглтон, или член класса stati c, или просто просто использовать текстовый компонент для отслеживания значения - для этого вы можете использовать int.TryParse
.
Наконец, чтобы установите начальное значение текста, вы можете проверить, является ли это уже числом, а если нет, установите его на ноль. Для этого также можно использовать int.TryParse
.
Всего:
Text killed;
void Start()
{
killed = GameObject.Find("killed").GetComponent<Text>();
int curKilled;
if (!int.TryParse(killed.text, out curKilled))
{
// Does not already contain a number, set it to zero
killed.text = "0";
}
}
void OnCollisionEnter2D(Collision2D bullet)
{
if(bullet.collider.tag == "bullet")
{
int curKilled;
if (int.TryParse(killed.text, out curKilled))
{
killed.text = (curKilled+1).ToString();
}
else
{
// assume it should have been zero
killed.text = "1";
}
Destroy(gameObject);
}
}