Прибавление очков при соприкосновении с объектом
Всех приветствую. Хочу попробовать написать простенькую игру. И на одном из этапов столкнулся с проблемой. При соприкосновении с объектом он исчезает и издаёт звук. Но мне ещё надо чтобы счётчик обновлялся. Как мне это сделать? Я создал Canvas и внутри него поместил текст. Прилагаю код для уничтожения объекта:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Destroys : MonoBehaviour
{
public AudioSource audio;
private void Start()
{
audio = GetComponent<AudioSource>();
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "bottle_green")
{
audio.Play();
Destroy(other.gameObject);
}
if(other.gameObject.tag == "coins")
{
audio.Play();
Destroy(other.gameObject);
}
}
}
Ответы (1 шт):
Возможно, это то, что Вы хотите сделать. Объявите public переменную scoreText и счетчик scoreNum, изначально равный 0. При соприкосновении увеличивайте счетчик и обновляйте значение на экране. Не забудьте в Инспекторе перетащить Ваш Text со счетом на соответствующее поле скрипта.
using UnityEngine;
using UnityEngine.UI;
public class Destroys : MonoBehaviour
{
public AudioSource audio;
public Text scoreText;
private int scoreNum = 0;
private void Start()
{
audio = GetComponent<AudioSource>();
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "bottle_green")
{
audio.Play();
Destroy(other.gameObject);
scoreNum++;
scoreText.text = "Score: "+ scoreNum;
}
if (other.gameObject.tag == "coins")
{
audio.Play();
Destroy(other.gameObject);
scoreNum++;
scoreText.text = "Score: "+ scoreNum;
}
}
}
И еще я заметила, что у Вас одинаковые действия при соприкосновении с bottle_green и coins. Возможно, это просто ещё недописанная часть, возможно, это для того, чтобы было два эффекта при одновременном соприкосновении, а возможно, это можно объединить и записать функцию OnTriggerEnter так:
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "bottle_green" || other.gameObject.tag == "coins")
{
scoreNum++;
scoreText.text = "Score: "+ scoreNum;
audio.Play();
Destroy(other.gameObject);
}
}
Соответственно, этот счёт будет сбрасываться при перезапуске. Если Вам нужно постоянно хранить это значение, можно использовать базу данных или PlayerPrefs... Но это уже другой вопрос.