Как посчитать количество объектов с определенным тегом в Unity?

Всем привет, нужна помощь в решении проблемы, т.к. еще школьник, только учусь. В общем, суть такая: Есть сцена, на ней кубы, Игрок-шар, управляется на W,A,S,D или стрелки, при соприкосновении с кубом тот уничтожается и увеличивает переменную с количеством кубов на 1. Когда переменная достигает одного значения, то сцена переключается. Главным образом проблема состоит в том, что пересоздавать один и тот же скрипт только чтобы поменять одну цифру не рационально, поэтому нужно в if(countCube==) После == поставить универсальное решение, которое собирает количество объектов с тегом "cube" и вписывает их туда.

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class MovePlayer : MonoBehaviour {
    public Rigidbody player;
    int countCube=0; 
    public Text countText;
    void Start () {
    }
    void Update () {
        player.AddForce (new Vector3(Input.GetAxis("Horizontal"),0f,Input.GetAxis("Vertical")), ForceMode.Impulse);
        if (countCube==4){
            SceneManager.LoadScene("Scene2");
        }
        countText.text = "Cubes Collected: " + countCube;
        if(player.transform.position.y<-5){
            SceneManager.LoadScene (SceneManager.GetActiveScene ().name);
        }
    }
    void OnTriggerEnter(Collider other){
        if (other.tag == "cube") {
            Destroy (other.gameObject);
            countCube++;
        }
    }
}

Ответы (1 шт):

Автор решения: Максим Фисман

Что происходит в комментариях? Зачем писать столько комментариев, если можно перейти в чат. Отвечаю на все вопросы.

  1. Метод GameObject.FindGameObjectsWithTag() возвращает массив всех элементов сцены с указанным тегом. Это нужно присовить переменной с типом данных GameObject[].
  2. Чтобы узнать длину массива используем поле Length: название_массива.Length
  3. Для того чтобы получить последний элемент массива почти всегда используется конструкция получения элемента с индексом (длина массива - 1). Почему? Представим массив строк (слева - индексы элементов, справа - значения)

0 - "Hello"

1 - "World"

2 - "How"

3 - "Are"

4 - "You"

Допустим, нужно получить элемент You. Длина массива 5 элементов, однако мы не можем получить 5-й элемент, т.к. послдений - 4-й (нумерация начинается с 0). Поэтому для получения последнего элемента делаем название_массива[название_массива.Length - 1]

Для получение предпоследнего элемента вычитаем 2, предпредпоследнего вычитаем 3 и т.д. Но обычно приходится получать последний элемент, поэтому вычитаем 1.

Скобки пользователь Methort указал неверно, о чем в последствии написал: они должны быть квадратные, т.к. элемент массива получается с помощью квадратных скобок. Круглые используются в программировании в основном при указании аргументов функции в

  • самой функции (перечисление нужных аргументов)
  • при вызове функции (задание аргументов).

Если остались еще вопросы, задавайте! Если мой ответ был вам полезен, пожалуйста, примите его, поставив галочку.

→ Ссылка