Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用out参数编写自己的自定义方法_C#_Unity3d - Fatal编程技术网

C# 使用out参数编写自己的自定义方法

C# 使用out参数编写自己的自定义方法,c#,unity3d,C#,Unity3d,在Unity中,我有一个附带触发器的游戏对象。此触发器侦听enter、exit和stay事件 当执行事件时,将检查碰撞对象的特定接口组件。如果此接口组件不为null/已附加,则代码应从接口组件调用方法 目前我是这样做的 public class LightSource : MonoBehaviour { private void OnTriggerEnter(Collider col) { HandleLight(col, LightAffectableActio

在Unity中,我有一个附带触发器的游戏对象。此触发器侦听enter、exit和stay事件

当执行事件时,将检查碰撞对象的特定接口组件。如果此接口组件不为null/已附加,则代码应从接口组件调用方法

目前我是这样做的

public class LightSource : MonoBehaviour
{
    private void OnTriggerEnter(Collider col)
    {
        HandleLight(col, LightAffectableAction.Enter);
    }

    private void OnTriggerExit(Collider col)
    {
        HandleLight(col, LightAffectableAction.Exit);
    }

    private void OnTriggerStay(Collider col)
    {
        HandleLight(col, LightAffectableAction.Stay);
    }

    private void HandleLight(Collider col, LightAffectableAction action)
    {
        ILightAffectable lightAffectable = col.GetComponent<ILightAffectable>();

        if (lightAffectable != null) // Is the component attached?
        {
            switch (action)
            {
                case LightAffectableAction.Enter:
                    lightAffectable.EnterLight();
                    break;

                case LightAffectableAction.Exit:
                    lightAffectable.ExitLight();
                    break;

                case LightAffectableAction.Stay:
                    lightAffectable.StayInLight();
                    break;
            }
        }
    }

    private enum LightAffectableAction
    {
        Enter,
        Exit,
        Stay
    }
}
但是我不知道如何创建一个像
TryGetComponent
这样的扩展方法来适合上面的示例代码

我传入一个组件类型作为参数,并获取该组件作为输出参数


如何创建这样的方法?

您可以创建一个通用扩展方法,就像现有的
GetComponent
方法一样

public static class ColliderExtensions
{
  public static bool TryGetComponent<T>(this Collider collider, out T component) where T : class
  {
    component = collider.GetComponent<T>();
    return component != null;
  }
}

您可以创建一个通用扩展方法,就像现有的
GetComponent
方法一样

public static class ColliderExtensions
{
  public static bool TryGetComponent<T>(this Collider collider, out T component) where T : class
  {
    component = collider.GetComponent<T>();
    return component != null;
  }
}
ILightAffectable component;
if (col.TryGetComponent(out component))
{
  component.ExitLight();
}