2016-07-28 5 views
2

この質問はUnity3Dのユーティリティスクリプトですが、この問題はC#での問題です。メソッドのインスタンスを見つける

"GameObjectName.ComponentTypeName.CallbackDelegateName"のような文字列(onClickCallbackPath)をスクリプトに提供しています。

検索ゲームオブジェクトとコンポーネントが問題ではありませんが、このコードを見て取る:あなたは私がAction型のオブジェクトを見つける必要が見ることができるように

string[] ss = onClickCallbackPath.Split ("." [0]); 
    Transform onClickTarget = Tools.FindDeepChild (transform.root, ss [0]); 
    MonoBehaviour[] allComponentsOnTarget = onClickTarget.GetComponents<MonoBehaviour>(); 

    foreach (MonoBehaviour mb in allComponentsOnTarget) 
    { 
     if (mb.GetType().Name == ss [1]) 
     { 
      MethodInfo[] methods = mb.GetType().GetMethods (BindingFlags.Public); 

      foreach (MethodInfo mi in methods) 
      { 
       if (mi.Name == ss [2]) 
       { 
        // And here is how I imagine it to work, and look for something similar... 
        // but of course there is no GetInstance method in MethodInfo 
        Action a = (Action) mi.GetInstance(mb); 
        break; 
       } 
      } 

      break; 
     } 
    } 

を(私は確かにそれが持つメソッドで作っています正しい署名)、私が見つけたMonoBehaviourの中から。

私はすべてのMethodInfoプロパティを調べて、私が探しているようなものを持っているようにしました。ネットで解決策を見つけようとしましたが、成功しませんでした。私は解決策を見つけることに私の問題は、ちょうど問題の名前を付け間違っていると賭ける。

しかし、私はあなたの問題が何かを理解していただければ幸いです。

助けてください。あなたが探しているもの

答えて

5

(Action)Delegate.CreateDelegate(typeof(Action), mb, mi) 
+0

パーフェクトです!ありがとう。 –

関連する問題