본문 바로가기
프로그래밍/Unity

Unity - n초 마다 실행시키기 매니저

by neive 2021. 11. 19.
728x90

 

만들다보면 꼭 몇 초에 한번 뭐를 체크해야

하거나 그럴 때가 있다 -_- 쉽게는 Invoke 나

Coroutine 쓰면 되지만 이런 애들은 관리가

필요하고 관리하고 싶지 않은데 관리해야 된

다면- 대략 제작 해보자면

 

using System;
using System.Collections.Generic;

public class ActionPerSecData
{
    public delegate void Action();
    public float m_Sec { private set; get; }
    public float m_CurSec = 0.0f;
    public Delegate m_Action;

    public ActionPerSecData(float sec, Delegate action)
    {
        m_Sec = sec;
        m_CurSec = 0.0f;
        m_Action = action;
    }
}

public class ActionPerSec
{
    protected List<ActionPerSecData> m_List = new List<ActionPerSecData>();
    
    // Update is called once per frame
    public void Update(float deltaTime)
    {
        foreach (var tmp in m_List)
        {
            tmp.m_CurSec += deltaTime;
            if (tmp.m_CurSec > tmp.m_Sec)
            {
                tmp.m_CurSec = 0.0f;
                ((Action)tmp.m_Action)();
            }
        }
    }

    public void Add(float sec, Action action)
    {
        m_List.Add(new ActionPerSecData(sec, action));
    }
}

이렇게 만들어서 원하는 곳에 붙여서 쓰면 된다..

 

protected ActionPerSec m_ActionPerSec = new ActionPerSec();

void Start()
{
	m_ActionPerSec.Add(1.0f, () => HpRegen());
}

protected void Update()
{
	m_ActionPerSec.Update(time.deltaTime);
}

virtual protected void HpRegen()
{
	// to do
}
728x90

댓글