【发布时间】:2016-03-20 23:55:16
【问题描述】:
注意两个扩展,一个用于 float,一个用于 Vector3。
请注意,var( 调用中只有细微差别。
在 c# 中,这些可以写成一个泛型吗?
我的问题的本质是:
在泛型中,你可以根据类型的性质进行分支吗?
public static IEnumerator Tweeng( this float duration,
System.Action<float> vary, float aa, float zz )
{
float sT = Time.time;
float eT = sT + duration;
while (Time.time < eT)
{
float t = (Time.time-sT)/duration;
vary( Mathf.SmoothStep(aa,zz, t) ); // slight difference here
yield return null;
}
vary(zz);
}
public static IEnumerator Tweeng( this float duration,
System.Action<Vector3> vary, Vector3 aa, Vector3 zz )
{
float sT = Time.time;
float eT = sT + duration;
while (Time.time < eT)
{
float t = (Time.time-sT)/duration;
vary( Vector3.Lerp(aa,zz, t) ); // slight difference here
yield return null;
}
vary(zz);
}
(顺便说一句,任何 c# 大师都在阅读,代码示例在 Unity 中,您可以在协程中访问框架系统。)
对于任何 Unity 开发人员阅读,您如何调用 Tweeng 的示例
// tweeng z to 20 degrees in .12 seconds
StartCoroutine(.12f.Tweeng( (t)=>transform.Eulers(0f,0f,t), 0f,20f) );
// fade in alpha in .75 seconds
StartCoroutine(.75f.Tweeng( (u)=>{c.a=u;s.color=c;}, 0f,1f) );
(如果您是 Unity 新手并且不熟悉扩展的基本概念,这里是 intro。)
【问题讨论】:
-
是的,您可以添加一个通用参数
T(float/Vector3),然后将Lerp/SmoothStep作为Func<T, T, T, float>传入 -
啊,基本上添加了另一个参数。让扩展解决这个问题会很棒,我想可以将该部门向下推到另一个通用函数