Задача такая - создать скрипт, который может запускать указанные события через указанное время. Моя реализация:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class TimedTriggers : MonoBehaviour {
	[Serializable]
	public struct TimedEvent {
		public float delay;
		public bool looping;
		public UnityEvent onEvent;
		private float timer;
		private bool readyToPlay;
	}
	[Min(0.01f)][SerializeField] private float m_timeStep = 0.1f;
	[SerializeField] private List<TimedEvent> m_events = new List<TimedEvent>();
	private void Awake() => StartCoroutine(TimeRoutine());
	private IEnumerator TimeRoutine() {
		while (true) {
			if (m_events.Count > 0)
				foreach (TimedEvent e in m_events)
					Tick(e);
			yield return new WaitForSeconds(m_timeStep);
		}
	}
	private void Tick(TimedEvent timedEvent) {
		if (timedEvent.timer < timedEvent.delay)
			timedEvent.timer += m_timeStep;
		else {
			if (timedEvent.looping && !timedEvent.readyToPlay)
				timedEvent.readyToPlay = true;
			
			if (timedEvent.readyToPlay) {
				timedEvent.readyToPlay = false;
				timedEvent.timer = 0f;
				timedEvent.onEvent.Invoke();
			}
		}		
	}
}
Проблема в том, что консоль ругается на наличие не публичных полей в структуре:

Можно забить и сделать все поля public, но перед этим хотелось бы узнать, есть ли нормальное решение этой проблемы?