如何减慢旋转速度?

时间:2018-06-22 19:47:34

标签: c# android unity3d game-engine

所以我写了一些代码使对象向左或向右滑动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotater : MonoBehaviour {

public Transform player;

void Update()
{
    if (Input.touchCount == 1)
    {
        // GET TOUCH 0
        Touch touch0 = Input.GetTouch(0);

        // APPLY ROTATION
        if (touch0.phase == TouchPhase.Moved)
        {
            player.transform.Rotate(0f, 0f, touch0.deltaPosition.x);
        }

    }
}
}

问题是当我快速滑动时,旋转将无法控制。所以我希望输入不那么敏感。

我的目标是使轮换像rolly vortex

我的设置:

  • 我做了一个空物体并将其放在中心

  • 将空对象设为播放器的父对象

  • 最后,我将代码放入空对象

这种设置使播放器按照某种轨道旋转,就像我告诉你的那样,类似于滚动涡旋。

2 个答案:

答案 0 :(得分:1)

首先,您希望能够缩放灵敏度。这意味着要使触摸位置的每个变化单位,都将获得旋转单位变化的倍数。为此,请创建一个可配置的(公共)成员变量public float touchSensitivityScale,然后将旋转值乘以该值。示例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotater : MonoBehaviour {

public Transform player;
public float touchSensitivityScale;

void Update()
{
    if (Input.touchCount == 1)
    {
        // GET TOUCH 0
        Touch touch0 = Input.GetTouch(0);

        // APPLY ROTATION
        if (touch0.phase == TouchPhase.Moved)
        {
            player.transform.Rotate(0f, 0f, touch0.deltaPosition.x * touchSensitivityScale);
        }

    }
}
}

现在,您可以在检查器中编辑触摸灵敏度。将touchSensitivityScale设置为1,其行为将与当前行为相同。如果将数字设为0.5,则旋转将是灵敏度的一半。

如果这不能完全解决问题,并且您还希望进行一些平滑处理或加速处理,则可能需要对问题进行编辑。

希望对您有帮助!

答案 1 :(得分:1)

您始终可以拥有某种负指数函数,而不是通过touch0.deltaPosition.x进行旋转。在这种情况下,可能是类似e ^(-xa)的东西,其中x是您的touch0.deltaPosition.x,而a是您必须根据所需的初始速度来确定的变量旋转。如果您不熟悉指数函数,请尝试使用Desmos等绘图软件绘制y = e ^(-x-a)并改变a的值。一旦您看到了,它应该很容易解释。