タイマークラス
早苗さんゲーとかみすちーゲー作ってて、弾幕制御周りでこういうソースをよく書く
code:sample.cs
HogeClass : MonoBehaiver{
float fireCounter
float FIRE_RATE
Update(){
if(fireCounter > FIRE_RATE){
fireCounter -= FIRE_RATE;
// do something
}
}
LateUpdate(){
fireCounter += Time.deltaTime;
}
}
Javascriptで言うsetIntervalをやりたいのだけど、クラス化して取りまとめた方が良いような、そんな気がする
TimerとTimerManager:Monobehaverみたいなのを作れば良いのだろうか
移譲で動くような仕組みにしたい
code:sample.cs
public class FunctionTimer {
public delegate void OnTimeOver();
bool isDoing = false;
float counter = 0f;
float duration = 0f;
OnTimeOver onTimeOver = null;
void Setup(OnTimeOver _onTimeOver, float _duration){
onTimeOver = _onTimeOver;
duration = _duration;
}
void Start(){
if(onTimeOver == null) return;
if(duration == 0f) return;
isDoing = true;
counter = 0f;
}
void Update(float _deltaTime){
if(!isDoing) return;
if(counter > duration){
counter -= duration;
onTimeOver();
}
counter += _deltaTime;
}
void Stop(){
isDoing = false;
counter = 0f;
}
}
書いてみたけど、Unityから分離したせいでカウンタ更新が手動になってしまっている・・・
ますますコルーチンで良いじゃんって気になる
こういうのはどうよ? あんま変わんない?
code:cs
public class FunctionTimer
{
public delegate void OnTimeover();
float m_Counter = 0f;
float m_Duration = 0f;
OnTimeover m_OnTimeover = null;
public void Initialize(float duration, OnTimeover onTimeover)
{
m_Counter = 0f;
m_Duration = duration;
m_OnTimeover = onTimeover;
}
public void Step(float deltaTime)
{
if(m_Counter > m_Duration){
m_Counter -= m_Duration;
m_OnTimeover();
}
m_Counter += _deltaTime;
}
}
public class TimerUser : Monobehavior
{
FunctionTimer m_Timer = new FunctionTimer();
void Start()
{
m_Timer.Initialize(10f, () => {
// Do Something
});
}
void Update()
{
m_Timer.Step(Time.deltaTime);
}
}
各FunctionTimerインスタンスを統括するTimerManagerを用意するって手もある。
その場合、Timerの死活監視をどうするか・・・?
UniTaskで良い気はすごいする