// Update is called once per frame void Update() { //validate registered scripts tmpScripts = new List <BaseMonoBehaviour>(); foreach (var script in registeredScripts) { if (script) { tmpScripts.Add(script); } } registeredScripts = tmpScripts; tmpScripts = null; //run actions on registered scripts foreach (var script in registeredScripts) { if (script) { if (script is IPlayerInputImplementable) { IPlayerInputImplementable myScript = (IPlayerInputImplementable)script; myScript.OnPlayerInput(InputManager.instance.PlayerInput); } if (script is IUpdateable) { IUpdateable myScript = (IUpdateable)script; myScript.CustomUpdate(); } } } }