Сохраняй в профиль время последнего сбора монеток (например DateTime.UtcNow) в момент когда игрок собирает монетки. В следующий сбор (независимо от рестарта игры) количество собранных монет будет datetime.utcnow.subtract(lastCollectTime).totalseconds * collectionRate (coinsPerSecond)
Вот только если кент время на телефоне перемотал и монетки получил)
Если я брошу событие, то в течение какого времени подписчики обработают событие. То есть они начнут выполнять свои действия в тот же момент и закончат максимум к концу кадра?