Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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#施工_C#_Unity3d_Abstract_Ienumerator - Fatal编程技术网

C#施工

C#施工,c#,unity3d,abstract,ienumerator,C#,Unity3d,Abstract,Ienumerator,我试图理解一个Unity示例脚本,并在示例中找到以下代码: protected IEnumerator SmoothMovement(Vector3 end) { float sqrRemainingDistance = (transform.position - end).sqrMagnitude; while (sqrRemainingDistance > float.Epsilon) { Vector3 newPosition = Vector3.

我试图理解一个Unity示例脚本,并在示例中找到以下代码:

 protected IEnumerator SmoothMovement(Vector3 end) {
    float sqrRemainingDistance = (transform.position - end).sqrMagnitude;

    while (sqrRemainingDistance > float.Epsilon) {
        Vector3 newPosition = Vector3.MoveTowards(rb2d.position, end, inverseMoveTime * Time.deltaTime);
        rb2d.MovePosition(newPosition);
        sqrRemainingDistance = (transform.position - end).sqrMagnitude;
        yield return null;
    }
}

public abstract void OnCantMove <T> (T component)
    where T : Component;
受保护的IEnumerator平滑移动(矢量3结束){
float sqrRemainingDistance=(transform.position-end).sqrMagnitude;
while(sqrRemainingDistance>float.Epsilon){
Vector3 newPosition=Vector3.MoveToward(rb2d.position,end,inverseMoveTime*Time.deltaTime);
rb2d.移动位置(新位置);
SqrMainingDistance=(transform.position-end).sqrMagnitude;
收益返回空;
}
}
公共抽象void OnCantMove(T组件)
式中T:组件;

我真的不明白最后两行。它们是什么意思?它们在做什么?

这是一个通用参数,带有一个约束,表示传递给它的任何对象都必须是
组件类型的


它是一个通用参数,带有一个约束,表示传递给它的任何对象都必须是
组件类型


这两行定义了一个抽象方法,该方法不返回任何内容,并且需要任何任意的
组件。任何实现抽象方法的类都应该实现这个抽象方法。

这两行定义了一个抽象方法,它不返回任何内容,并且需要任何任意的
组件。任何实现抽象方法的类都应该实现这个抽象方法。

它只是一个方法签名。细分如下:

公开摘要

必须在派生类中重写的公共方法

void

无返回值

OnCantMove

方法名为
OnCantMove

(T组件)

它接受一个类型参数
T
,以及它正在调用的
组件
的类型实例
T
。通常,如果编译器使用的是该类型的实例参数,那么当您调用此方法来自行计算类型参数时,编译器就足够聪明了。因此,您可以取消
参数来调用此函数

其中T:Component


类型参数
T
被限制为
组件类型

它只是一个方法签名。细分如下:

公开摘要

必须在派生类中重写的公共方法

void

无返回值

OnCantMove

方法名为
OnCantMove

(T组件)

它接受一个类型参数
T
,以及它正在调用的
组件
的类型实例
T
。通常,如果编译器使用的是该类型的实例参数,那么当您调用此方法来自行计算类型参数时,编译器就足够聪明了。因此,您可以取消
参数来调用此函数

其中T:Component


类型参数
T
被约束为
组件类型

最后两行定义了继承类需要重写的抽象方法。最后两行定义了继承类需要重写的抽象方法。