KeysCG
@KeysCG
3d designer/Art Designer

Почему переменная bool изменяется во всех копиях префаба на сцене?

Доброго времени суток!
Пытаюсь сделать грядки на которые можно садить семена и после какого времени они вырастают и их можно собрать!
Вроде как всё нормально работает, но есть проблема что если много раз тыкать на одну и ту самую грядку то можно до бесконечности создать на одной грядке кучу семян. Пробовал сделать проверку через bool (если что то растёт то тру и ничего посадить нельзя), но возникла такая проблема что bool изменяется на всех копиях префабов, а нужно что бы конкретно на том на котором растёт растение :(
Код грядки:
public class GardenBlockData : MonoBehaviour
{
    public int SeedsID = -1;
    public GameObject[] SeedsType;

    private void OnMouseDown()
    {
        for (int i = 0; i < SeedsType.Length; i++)
        {
            if (i == SeedsID)
            {
                Instantiate(SeedsType[i], this.transform.position, Quaternion.identity);
            }
        }
    }
}

Код семян:
public class SeedsData : MonoBehaviour
{
    public float StartStage = 0f;
    public float EndStage = 1f;
    public float SpeedStage = 0.1f;
    public float BigSeed;

    private void Update()
    {
        BigSeed = EndStage / 2f;
        StartStage += SpeedStage * Time.deltaTime;
        if (StartStage <= BigSeed)
        {
            transform.GetChild(0).gameObject.SetActive(true);
            transform.GetChild(1).gameObject.SetActive(false);
            transform.GetChild(2).gameObject.SetActive(false);
        }
        else if (StartStage >= BigSeed & StartStage <= EndStage)
        {
            transform.GetChild(0).gameObject.SetActive(false);
            transform.GetChild(1).gameObject.SetActive(true);
        }
        else if (StartStage >= EndStage)
        {
            transform.GetChild(1).gameObject.SetActive(false);
            transform.GetChild(2).gameObject.SetActive(true);
            StartStage = EndStage;
        }
    }

    private void OnMouseDown()
    {
        if (StartStage == EndStage)
        {
            Destroy(gameObject);
        }
    }
}

Как будет правильно сделать проверку, что бы не плодить кучу копий кода???
Подскажите пожалуйста, а то уже всё перерыл и не могу никак придумать :(
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ответы на вопрос 1
Все грядки закинь в List, выдай грядкам ID статуса, то-есть:
Только посадил - 1
Растет - 2
Выросло - 3

Проверяй статус через цикл for, у каждой грядки.

for (i = 0; i < ListGryadok.Count; i++)
      {
              if (Gryadka.statusGryadki[i] == 1)
              {
                    // дальше сам
              }
      }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы