2016-08-24 11 views
1

メソッドを後で呼び出せるように、クラスコンストラクタに渡す方法を知る必要があります。その考え方は、2つのプロパティー、ダメージ整数、およびそのタイプの弾丸がオブジェクトに当たったときに呼び出されるメソッドを持つBulletクラスを持つことです。以下のコードは少し良く説明する必要があります:後で実行するクラスにメソッドを保存する方法

public class Bullet 
{ 
    public Method OnHit; 
    public int Damage; 
    public Bullet(int Damage,Method OnHit) 
    { 
     this.Damage = Damage; 
     this.OnHit = OnHit; 
    } 
} 

これですので、私はBullet.OnHit(HitGameObject)のようなものを実行することにより、インパクト時に異なるタスクをプリフォーム弾丸を作ることができます。

答えて

3

Actionを使用して関数に関数を渡し、別のActionに関数を渡すことができます。格納されている関数はAction.Invoke()で呼び出すことができます。

public class Bullet 
{ 
    public int Damage; 
    System.Action savedFunc; 

    public Bullet(int Damage, System.Action OnHit) 
    { 
     if (OnHit == null) 
     { 
      throw new ArgumentNullException("OnHit"); 
     } 

     this.Damage = Damage; 
     savedFunc = OnHit; 
    } 

    //Somewhere in your Bullet script when bullet damage == Damage 
    void yourLogicalCode() 
    { 
     int someBulletDamage = 30; 
     if (someBulletDamage == Damage) 
     { 
      //Call the function 
      savedFunc.Invoke(); 
     } 
    } 
} 

使用

void Start() 
{ 
    Bullet bullet = new Bullet(30, myCallBackMethod); 
} 

void myCallBackMethod() 
{ 

} 
+1

だけ追加。 OPはシステムの "代理人"と "イベント"を使用することもできます – Cabrra

+1

@Cabrraはい、OPは生の '代理人 'と'イベント 'を使用できます。 OPは関数に関数を渡したかったのですが、後でそれを呼び出すだけです**後でイベントを呼び出してください。私は、 'System.Action'や' Func'が、このコードとコードのほうにずっと適していると思います。 – Programmer

+1

優秀な説明(また上書き) – Cabrra

0

必要なものはC#で代理人と呼ばれます まず、メソッドの入出力を定義して、このタイプのメソッドを変数と同様に扱う必要があります。この行の

public class Bullet 
{ 
public delegate void OnHit(bool something); 
public OnHit onHitMethod; 
public int Damage; 
public Bullet(int Damage, OnHit OnHit) 
{ 
    this.Damage = Damage; 
    this.onHitMethod = OnHit; 
} 
} 

あなただけのデリゲートの種類を定義しpublic delegate void OnHit(bool something);し、このラインであなただけの変数のようにメソッドを定義しpublic OnHit onHitMethod;

関連する問題