joh*_*y 5 1 c# interpolation unity-game-engine
我正在写一个功能,在一段时间内慢慢转动90度.到目前为止一切正常,我只需要弄清楚如何使它围绕一个点旋转而不是围绕变换中心旋转.
protected bool _isRotating = false;
public IEnumerator RotateWithEasing(GameHelper.Axis axis, Vector3 isolatedAxisPoint, float inTime)
{
if(_isRotating)
{
yield break;
}
_isRotating = true;
var degrees = this.GetDegreesFromAxis(axis);
Quaternion fromAngle = transform.rotation;
Quaternion toAngle = Quaternion.Euler(transform.eulerAngles + degrees);
for (float t = 0f; t < 1f; t += Time.deltaTime / inTime)
{
transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t);
yield return null;
}
_isRotating = false;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我指出正确的方向,我如何修改它,以便它围绕指定的isolatedAxisPoint旋转?
这是一个实际的例子Unity补间,恰好在文本编辑器的另一个窗口中显示!
如果你想旋转某些东西,只需在IEnumerator的循环中使用deltaTime,并调整eulerAngles或只调用Rotate.(在Unity中不要出于任何原因使用四元数.)在这个例子中,我只是调用Rotate.
这是Unity中非常基本的模式.
这是Unity中补间的基本模式.你将在Unity中完成这1000次!
请注意,你当然
yield return null;
Run Code Online (Sandbox Code Playgroud)
在循环内部,它意味着"等到下一帧".
(请注意,与任何补间一样,最好在最后强制设置最终值,这样你才能知道它是完美的.请注意,在这个例子中,我只需在循环结束时设置eulerAngles.)
private IEnumerator _roll( Vector3 delta )
{
rollBegins.Invoke();
Vector3 begin = transform.eulerAngles;
float rollSecs = 2f; // speed of the roll
float startTime = Time.time;
float endTime = startTime+rollSecs;
while (Time.time < endTime)
{
Vector3 d = delta * ( Time.deltaTime / rollSecs );
transform.Rotate(d, Space.World );
yield return null;
}
transform.eulerAngles = .. perfectly correct end values;
busy = false;
rollComplete.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
{注意,在实际的代码示例中,"delta"被理解为仅在一个轴上; 不要担心这个,它只是一个使用协程的补间的例子.}
注意 - 当然循环中有"两种方式".你可以计算你应该移动那个帧的少量.或者,您可以计算当时新职位应该是什么.由你决定.许多程序员认为后者更合乎逻辑,如果是这样,就这样做.另请注意,您可以执行while循环直到某个时间过去,或者,您可以执行while循环直到到达目的地!(对浮动平等非常小心.)选择是你的.
请注意,您经常使用Lerp或更好的SmoothStep与此类补间.它在Unity中无处不在.掌握基本模式后,请进行实验.
请注意,在我的示例中,代码使用UnityEvent标记动画的开头和结尾.这非常普遍.毕竟通常情况是,一旦一些动作结束,你就必须继续做其他事情.另一个很好的例子是,当某些东西是动画时,用户被阻止说转向或游戏中的任何情况.
UnityEvent的优秀介绍/sf/answers/2537458311/请投票:)
作为记录.
在Unity中补间的真正高级方法是tweeng:
需要一段时间才能掌握它,但它非常强大.令人难以置信的是,tweeng扩展只有几行代码.
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |