【问题标题】:How do I delegate calling of dynamic method names and dynamic parameters如何委托调用动态方法名称和动态参数
【发布时间】:2016-07-07 15:34:28
【问题描述】:

能不能有一个函数盲目处理动态方法名和动态参数?

我正在使用 Unity 和 C#。我希望 Gizmo 的绘制在对象从场景中移除(销毁)后持续一段时间,所以我想动态地将绘制职责传递给另一个对象。

例如,我希望能够做到这一点:

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

如您所见,被调用的方法和参数数量各不相同。有没有一种方法可以实现我的目标,而无需为每种 gizmo 类型编写一个非常精细的包装器? (有 11 个。)(附带目标:我还想添加我自己的论点来说明经理应该持续绘制 Gizmo 多长时间,但这是可选的。)

【问题讨论】:

标签: c# unity3d


【解决方案1】:

我建议将调用转换为 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);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多