为了账号安全,请及时绑定邮箱和手机立即绑定

如何减慢旋转速度?

如何减慢旋转速度?

PHP
萧十郎 2021-08-29 17:51:29
所以我写了一些代码来让我向左或向右滑动对象旋转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);        }    }}}问题是当我快速滑动时,旋转将无法控制。所以我希望输入不那么敏感。我的目标是让旋转像滚动的漩涡我的设置:我做了一个空物体并将它放在中心使空对象成为我的播放器的父对象最后,我把我的代码放在空对象中这个设置让玩家在某种轨道上旋转,就像我告诉你的那样,类似于滚滚涡流。
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

而不是通过 touch0.deltaPosition.x 旋转,您总是可以使用某种负指数函数。在这种情况下,它可能与 e^(-xa) 类似,其中 x 是您的 touch0.deltaPosition.x,而 a 将是一个变量,您必须根据您想要的初始速度有多快来确定的旋转。如果您不熟悉指数函数,请尝试使用 Desmos 之类的绘图软件绘制 y=e^(-xa) 并改变 a 的值。一旦你想象它应该是不言自明的。


查看完整回答
反对 回复 2021-08-29
?
桃花长相依

TA贡献1860条经验 获得超8个赞

首先,您希望能够缩放灵敏度。这意味着对于触摸位置的每个单位变化,您将获得旋转变化单位的一些倍数。为此,创建一个可配置(公共)成员变量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,则旋转的灵敏度将减半。


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


我希望它有帮助!


查看完整回答
反对 回复 2021-08-29
  • 2 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信