所以我写了一些代码使对象向左或向右滑动
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
我的设置:
我做了一个空物体并将其放在中心
将空对象设为播放器的父对象
最后,我将代码放入空对象
这种设置使播放器按照某种轨道旋转,就像我告诉你的那样,类似于滚动涡旋。
答案 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的值。一旦您看到了,它应该很容易解释。