我正在做一个游戏,门必须平稳地旋转-90度。我已经尝试了很多不同的方法,但是我无法使其正常工作。
public float degrees = -90f;
public Transform door;
private void update()
{
door.transform.Rotate(0f, 0f, degrees, Space.Self);
}
我如何使其平滑旋转,而不仅仅是卡入到位?
答案 0 :(得分:0)
一个简单的解决方案
public float degrees = -90f;
public float rotationDuration = 5f;
public Transform door;
private float startTime;
private bool isOpenningDoor;
private void OpenDoor()
{
startTime = Time.time;
door.transform.eulerAngles = Vector3.zero;
isOpenningDoor = true;
}
private void update()
{
if(Input.GetKeyDown(KeyCode.O))//for testing
{
OpenDoor();
}
if(isOpenningDoor)
{
float ratio = (Time.time - startTime)/rotationDuration;//percentage of total rotation
if(ratio >= 1f)//when you reached max rotation
{
ratio = 1f;
isOpenningDoor = false;//Stop extra rotation
}
door.transform.Rotate(0f, 0f, ratio * degrees, Space.Self);
}
}
在示例中,打开时间为5秒。如果您想做很多小型的程序员动画,我建议Dotween进行一些轻松和快速的实现。
答案 1 :(得分:0)
您可以使用Coroutines和Slerp方法来做到这一点。试试这个:
using System.Collection;
...
public Transform door;
public float degrees = -90f;
public float someSpeed = 0.08f;
IEnumerator OpenDoor ()
{
while (door.transform.localEulerAngles.y > degrees)
{
door.transform.localEulerAngles = Vector3.Slerp(door.transform.localEulerAngles
, new Vector3(0, degress - 0.2f, 0), someSpeed);
yield return new WaitForEndOfFrame();
}
yield break;
}
在需要的地方,只需致电StartCoroutine(OpenDoor());
。
希望这就是您想要的。