C#施工
我试图理解一个Unity示例脚本,并在示例中找到以下代码: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.
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
被约束为组件类型
最后两行定义了继承类需要重写的抽象方法。最后两行定义了继承类需要重写的抽象方法。