- Home /
Question by
stephen_ho · May 07, 2021 at 09:37 AM ·
eventsingleton
Using singleton or UnityEvent
Hi guys, In the game I am developing I rely on using singleton class GameManager to trigger functions to do stuffs such as update score, create die fx,etc.. Is this a good pratice or I should switch to use event? My Monster code
public virtual IEnumerator CheckDie()
{
yield return new WaitUntil(() => current_hp <= 0);
//OnDied?.Invoke();
GameManager.Instance.UpdateScore(base_score);
GameManager.Instance.CreateDieFx(transform.position);
GameManager.Instance.sfx.PlayOneShot(GameManager.Instance.monster_die_sfx,0.3f);
GameManager.Instance.camera_shake_fx.Shake();
current_movespeed = base_movespeed;
DropCoin();
Lean.Pool.LeanPool.Despawn(this.gameObject);
}
Example I use event
public Vector3 origin_position;
protected float t_lerp = 0.1f;
public UnityEvent OnDie;
And I call it in the CheckDie
public virtual IEnumerator CheckDie()
{
yield return new WaitUntil(() => current_hp <= 0);
OnDie?.Invoke();
GameManager.Instance.UpdateScore(base_score);
GameManager.Instance.CreateDieFx(transform.position);
GameManager.Instance.sfx.PlayOneShot(GameManager.Instance.monster_die_sfx,0.3f);
GameManager.Instance.camera_shake_fx.Shake();
current_movespeed = base_movespeed;
DropCoin();
Lean.Pool.LeanPool.Despawn(this.gameObject);
}
I register it in a another spawner class
monster.GetComponent<BaseMonster>().OnDie = TestEvent;
monster.GetComponent<BaseMonster>().Run();
wave_index += 1;
Then I setup it in Scene like this
capture.png
(21.9 kB)
Comment
Your answer
Follow this Question
Related Questions
StartCoroutine by another class (Coroutine inside Coroutine - Instance class) 1 Answer
Best practice to use C# event on Singleton 1 Answer
Cleanest way to decouple Manager class with events 1 Answer
Singleton that can react to game events 2 Answers
Deactivating object makes events null. What is the best workaround? 1 Answer