Ваш Coroutine вызывается в функции обновления каждый кадр.Вы можете кэшировать свой Coroutine Rocksplant и выполнить проверку обновлений, если таг подпрограмма пуста или нет, когда она пуста, вы снова вызываете подпрограмму.Вот как вы кешируете это.
Например,
private Coroutine MyRocksplantRoutine = null;
Кстати, сделайте это глобальным.Теперь в вашей функции обновления вы делаете это
Void Update()
{
If(MyRocksplantRoutine == null)
{
MyRocksplantRoutine = StartCoroutine(Rocksplant());
}
}
Таким образом, вы можете сохранить ее в функции обновления, не совершая повторный вызов.После этого вы обнуляете переменную MyRocksplantRoutine в конце сопрограммы Rocksplant следующим образом.
void IEnumerator Rocksplant()
{
//your code
yield return new WaitForEndOfFrame();
MyRocksplantRoutine = null;
}