大家好,我正在尝试制作一个扩展方法,它必须让你做单位的旋转功能,但你可以选择执行的时间,并在每次调用例程时递增值。
示例:transform.Rotate(90,0,0, SecondsInWichMakeTheTransition);
这是我写的代码。
public static class RotateMeExtensions{
public static IEnumerator MoveObject(this Transform source,
int x,int y, int z, float overTime)
{
Quaternion target = new Quaternion();
float a = source.rotation.x + x;
float b = source.rotation.y + y;
float c = source.rotation.z + z;
target.eulerAngles = new Vector3(a, b, c);
float startTime = Time.time;
while(Time.time < startTime + overTime)
{
source.rotation = Quaternion.Lerp(source.rotation, target, (Time.time - startTime)/overTime);
yield return null;
}
source.rotation = target;
}
现在我用Button UI调用它,但在我第一次使用它之后,它再也无法工作了,eulerangles保持在90,7。我希望每次增加90度。 再见你再见
答案 0 :(得分:1)
我不确定它是否可以作为扩展名直接使用但是如果你把它作为一个简单的函数(在Quaternion之前没有“this”)你可以做以下
如果你真的想要作为一个扩展来创建像你这样的虚拟函数,它唯一能做的就是调用全局Monobehaviour Coroutine并传递其他函数。像
这样的东西public static void MoveObject(this Quaternion source, int x,int y, int z, float overTime)
{
GlobalMonoBehaviour.instance.StartCoroutine(MoveObjectCoroutine(source, x, y, z, overTime));
}
public static IEnumerator MoveObjectCoroutine(Quaternion source, int x,int y, int z, float overTime)
{
Quaternion target = new Quaternion();
Vector3 tempV = new Vector3(source.eulerAngles.x + x,
source.eulerAngles.y + y, source.eulerAngles.z + z);
target.eulerAngles = tempV;
float startTime = Time.time;
while(Time.time < startTime + overTime)
{
source = Quaternion.Lerp(source, target, (Time.time - startTime)/overTime);
yield return null;
}
source = target;
}
希望有所帮助
答案 1 :(得分:1)