2016-07-07 137 views
1

它可能有一個函數盲目處理動態方法名稱和動態參數?如何委託動態方法名稱和動態參數的調用

我正在使用Unity和C#。我想讓一個Gizmo的繪圖在一個對象從場景中移除(被銷燬)之後堅持一會兒,所以我想動態地將繪圖職責傳遞給另一個對象。

例如,我想能夠做到這一點:

GizmoManager.RunThisMethod(Gizmos.DrawSphere (Vector3.zero, 1f)); 
GizmoManager.RunThisMethod(Gizmos.DrawWireMesh (myMesh)); 

正如你可以看到被調用的方法和參數個數變化。有沒有一種方法來實現我的目標,而不寫一個非常詳細的包裝每個Gizmo類型? (有11個)(側面目標:我還想補充一下自己的觀點來說明經理應該多長時間繪製小發明,但這是可選的。)

+0

你會愛** tweeng **。介紹.. http://stackoverflow.com/a/372​​28628/294884 – Fattie

回答

5

我建議將呼叫轉換爲lambda。這將允許GizmoManager根據需要多次調用它。

class GizmoManager 
{ 
    void RunThisMethod(Action a) 
    { 
    // To draw the Gizmo at some point 
    a(); 
    } 
    // You can also pass other parameters before or after the lambda 
    void RunThisMethod(Action a, TimeSpan duration) 
    { 
    // ... 
    } 
} 

// Make the drawing actions lambdas 
GizmoManager.RunThisMethod(() => Gizmos.DrawSphere(Vector3.zero, 1f)); 
GizmoManager.RunThisMethod(() => Gizmos.DrawWireMesh(myMesh)); 

// You could also draw multiple if needed: 
GizmoManager.RunThisMethod(() => { 
    Gizmos.DrawSphere(Vector3.zero, 1f); 
    Gizmos.DrawWireMesh(myMesh); 
});