首页 > 解决方案 > 如何顺利转动门

问题描述

我正在制作一个门必须平稳旋转-90度的游戏。我尝试了很多不同的东西,但我无法让它发挥作用。

public float degrees = -90f;

public Transform door;

private void update()
{
    door.transform.Rotate(0f, 0f, degrees, Space.Self);
}

我如何使它平稳旋转而不是卡入到位?

标签: c#unity3d

解决方案


一个简单的解决方案

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做一些很好的缓动和快速的实现。


推荐阅读