前提・実現したいこと
現在、デリゲートについて勉強しています。
実装方法については理解出来ましたが、デリゲートの特徴である**「実行するメソッドを変数に保存でき、後からまとめて実行出来る」**
自分はこの機能をどう生かしていけば良いのか理解できませんでした...
どういった場面で使うと効果的なのか?また無理をして使うような機能ではないのか?お聞きしたいです。
同じ挙動をする2つのコードを下記に記載しています
目的:Mainクラス内のhpを減らす
例1はデリゲート使用、例2は未使用です。
例2の方が個人的に馴染みがありとっつきやすいのもありますが
ここまでコードが長くなる例1には疑問しか湧いてこないです
該当のソースコード
・例1
C#
1public class Event : MonoBehaviour 2 { 3 Main main = new Main(); 4 5 private void Start() 6 { 7 main.hp = 100; 8 9 Debug.Log("現在HP: " + main.hp); 10 11 // メソッドの保存 12 main.onDamage += main.TakeDamage; 13 main.onDamage += main.TakeDamage; 14 main.onDamage += main.TakeDamage; 15 16 // 3回10ダメージ与える 17 main.PlayDelegate(10); 18 19 Debug.Log("現在HP: " + main.hp); 20 } 21 } 22 23 public class Main 24 { 25 // デリゲート型の定義 26 public delegate void OnDamageDelegate(int damage); 27 // デリゲート型変数の宣言 28 // event をつけるとクラス内でのみ呼び出せるようになる 29 public event OnDamageDelegate onDamage; 30 31 public int hp { get; set; } 32 33 public void TakeDamage(int damage) 34 { 35 hp -= damage; 36 Debug.Log(damage + "ダメージ"); 37 } 38 39 public void PlayDelegate(int damage) 40 { 41 onDamage(damage); 42 } 43 }
・例2
C#
1public class Event : MonoBehaviour 2 { 3 Main main = new Main(); 4 5 private void Start() 6 { 7 main.hp = 100; 8 9 Debug.Log("現在HP: " + main.hp); 10 11 // メソッドの実行 12 // 3回10ダメージ与える 13 main.TakeDamage(10); 14 main.TakeDamage(10); 15 main.TakeDamage(10); 16 17 Debug.Log("現在HP: " + main.hp); 18 } 19 } 20 21 public class Main 22 { 23 public int hp { get; set; } 24 25 public void TakeDamage(int damage) 26 { 27 hp -= damage; 28 Debug.Log(damage + "ダメージ"); 29 } 30 }
回答3件
あなたの回答
tips
プレビュー