2017-10-25 14 views
0

マイキュークラス。C#の異なるアクションのキュー

void CreateCube() 
{ 
    // doSomething.. 
} 

void SetPosition(Vector3 pos) 
{ 
    // doSomething.. 
} 

私はこれを使用することができます:

public class JobManager : MonoBehaviour { 

private Queue<Action> queue; 

public void AddAction(Action action) 
    { 
     queue.Enqueue(action); 
    } 
.... 

は、私は2つの方法を持っている

JobManager.Instance.AddAction(CreateCube); 

をしかし、これではありません:私はキューを定義することができますどのように

JobManager.Instance.AddAction(SetPosition); 

すべての異なるアクション?または、どのように私は別のアクションを追加できますか?

編集:

JobManagerはこのようなアクションを呼び出します。

IEnumerator ActionControl(){ 
     while (true){ 
      if (currentQueue != null){ 
       while (true){ 
        currentQueue(); 
        yield return null; 
        currentQueue = null; 
        break; 
       } 
      } 
      yield return null; 
     } 
    } 

    private void Update(){ 
     if (queue.Count > 0 && currentQueue == null){ 
      currentQueue = queue.Dequeue(); 
     } 
    } 

私が本当に望むのは、どのメソッドも1つのキューに配置できることです。 (パラメータ付きかどうか)次に、それらを順番に実行します。それは可能ですか?ここ

+3

は 'SetPosition'は何とかそれを渡すためにあなたが持っている引数を必要としています。一つの方法は、ラムダを使用することです: 'AddAction(()=> SetPosition(POS))を' – Sinatr

+1

あなたは可能性があるとします。どのように 'SetPosition'をアクションの待ち行列から呼び出すことを計画していますか?引数が必要です。あなたはどうやって議論をパスしますか? –

+0

私の質問を編集し、 "AddAction(()=> SetPosition(pos))"を試します。 – sadrag

答えて

0

あなたの問題はqueueがタイプQueue<Action>であるということです。この新しいタイプのアクションを受け入れるには、タイプQueue<Action<Vector3>>の別のキューが必要になります。

あなたはこのようなものが必要です:

public class JobManager 
{ 
    private Queue<Action> plainQueue; 
    private Queue<Action<Vector3>> vectorQueue; 

    public void AddAction(Action action) 
    { 
     plainQueue.Enqueue(action); 
    } 

    public void AddAction(Action<Vector3> action) 
    { 
     vectorQueue.Enqueue(action); 
    } 
} 

また、.AddAction(() => SetPosition(pos))は動作しますが、これはAction<Vector3>ラップ匿名Actionを作成していることに注意してください。コードをデバッグするのが難しくなる可能性があります。呼び出し以来

+0

質問を編集します。あなたは見えますか? – sadrag

+0

ラムダが働いています。それはエラーになりません。ではない?あなたは、それは関係なく、パラメータのすべてのアクションのために仕事をしたい場合、私はそれをラップするためにラムダを使用し、その後 – sadrag

+0

..前に使用することはありません。 '.AddAction(()=> SetPosition(POS))'ちょうどそれがのparamsのないアクション内部のparamsを持つアクションを隠しだとmindfullなります。 – Jaguir

関連する問題