What other ways can i invoke my Function outside of update and start?
I'm creating a script that manages the players stats, and so far i've created a function that works, but if i call it in update it invokes multiple times, i cant put it in start either because it needs to check every frame for variables. Is there another way to evoke it once? here's my script
 public float maxHealth = 100;
     public float maxStamina = 100;
     public float maxMana = 100;
 
     public float playerHealth = 100;
     public float playerStamina = 100;
     public float playerMana = 100;
 
     public bool losingStamina;
     
     
 
 
     void Update () {
         if (losingStamina == true)
         {
             CancelInvoke("regenStamina");
             
 
         }
         else if (playerStamina < maxStamina)
             {
             
                 InvokeRepeating("regenStamina", 3f, 1.0f);
             }
         
 
 
 
 
     }
     void regenStamina()
     {
         //StamRegenDelay -= 1;
         playerStamina += 1f;
         if (playerStamina >= maxStamina)
         {
             playerStamina = maxStamina;
         }
             
 
     }
 
              Answer by kbop2000 · Jul 13, 2020 at 09:18 AM
If you want something simpe script,
     private System.Action OnceAction { get; set; } = null;
 
     private void Awake()
     {
         OnceAction = RegenStamina;
     }
 
     private void Update()
     {
         if (OnceAction != null) OnceAction.Invoke();
     }
 
     private void RegenStamina()
     {
         OnceAction = null;
 
         //  playerStamina += 1f;
         // ...
     }
 
               used to Update() function, another way is ..
 using System.Collections;
 using System.Collections.Generic;
 
 using UnityEngine;
 
 public class Updator : MonoBehaviour
 {
     public static Updator Get { get; set; } = null;
 
     public static void Start(IEnumerator iterator)
         => Get.list.Add(iterator);
     
 
     private readonly List<IEnumerator> list = new List<IEnumerator>();
 
     private void Awake()
         => Get = this;
 
     private void Update()
     {
         for (int i = 0; i < list.Count; ++i)
         {
             if (!list[i].MoveNext()) list.RemoveAt(i--);
         }
     }
 
 }
 
               Alternatively, using StartCoroutine() function is good idea ..
Your answer
 
             Follow this Question
Related Questions
Raycast ignoring InvokeRepeating intervals 0 Answers
Rigidbody fps controller stopped responding after update to unity 5.5 1 Answer
Does who will upload to iOs store has some real problems in 2019, (need to buy new mac) 0 Answers
Why is my transform null in Update? 1 Answer
how can i increese the repete rate in invoke repeting after some time 1 Answer