我正在开发一款手机游戏,我想通过在屏幕上上下移动手指来围绕黑心旋转围绕黑心的红色圆圈。我已经写了一个代码,但是遇到一个问题,当我改变手指的运动方向太快时,它并不能改变红色圆圈的运动方向。(蓝色圆圈代表手指,那两个箭头代表其运动方向)。希望您理解我想说的话。
这是我的代码:
private Vector3 fp; //First touch position
private Vector3 lp; //Last touch position
private float dragDistance; //minimum distance for a swipe to be registered
public static float movement = 0f; //direction
void Start()
{
movement = 0f;
dragDistance = Screen.height * 1 / 100; //dragDistance is 1% height of the screen
}
void Update()
{
if (Input.touchCount == 1)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{
fp = touch.position;
lp = touch.position;
}
else if (touch.phase == TouchPhase.Moved)
{
moveSpeed = Input.touches[0].deltaPosition.magnitude / Input.touches[0].deltaTime;
lp = touch.position;
if (Mathf.Abs(lp.y - fp.y) > dragDistance)
{
if (lp.y > fp.y)
{ //Up swipe
movement = -1f;
}
else
{ //Down swipe
movement = 1f;
}
}
if(lp.y > 0)
{
if (Input.touches[0].deltaPosition.magnitude < lp.y)
movement *= -1f;
}
if (lp.y < 0)
if (Input.touches[0].deltaPosition.magnitude > lp.y)
movement *= -1f;
}
else if(touch.phase == TouchPhase.Stationary)
{
movement = 0f;
fp = touch.position;
lp = touch.position;
}
else if (touch.phase == TouchPhase.Ended)
{
lp = touch.position;
movement = 0f;
}
}
}
private void FixedUpdate()
{
transform.RotateAround(Vector3.zero, Vector3.forward, movement * Time.fixedDeltaTime * -moveSpeed);
}
如果我理解正确,手指是直接控制旋转,而不是旋转速度吗?
如果是这样,我建议您保存初始旋转,并简单地使用从初始触摸位置到当前触摸位置的y值差来产生新的旋转。即创建原始变换的副本并将其旋转,以覆盖前一帧的变换。
我在应用增量旋转时遇到了问题,因为会累积小误差。因此,如果您开始疯狂地拖动手指,则旋转可能开始表现为奇数,并且在将手指恢复到原始位置时不会回到空挡。我不确定这是否是您遇到的实际问题,这是更一般的建议。