如何用滑动向右和向左修复运动



我损失了很多时间,试图找到代码中的问题,但是我找不到解决方案为什么没有触发我的代码。在我以前的游戏实现此代码时,它可以完美地工作,现在当我将新游戏实施相同的触摸运动代码时,它不起作用。

我试图调试代码并将debug.log放入更新方法中,当我在屏幕上刷卡时,它甚至没有触发。

这是代码:

int left = 0;
int right = 0;
int maxLeftCycles = 5;
int maxRightCycles = 5;
void Start()
{
    //touch
    left = maxLeftCycles;
    right = maxRightCycles;
}
private void Update()
{
    timer += Time.deltaTime;
    if (Input.GetKeyUp(KeyCode.RightArrow) ||
        Swipe.swipe == Swipe.SwipeDirection.right)
    {
        Swipe.ResetSwipe();
        right = 0;
    }
    if (Input.GetKeyUp(KeyCode.LeftArrow) ||
        Swipe.swipe == Swipe.SwipeDirection.left)
    {
        Swipe.ResetSwipe();
        left = 0;
    }
}
void FixedUpdate()
{
    if (left < maxLeftCycles && !isMoving)
    {
        desiredPos = transform.position + Vector3.left * 1.52f;
        isMoving = true;
        left++;
    }
    if (right < maxRightCycles && !isMoving)
    {
        desiredPos = transform.position - Vector3.right * 1.52f;
        isMoving = true;
        right++;
    }
    if (isMoving)
    {
        transform.position = Vector3.MoveTowards(transform.position, desiredPos, moveSpeed * Time.deltaTime);
        // this == is true if the difference between both
        // vectors is smaller than 0.00001
        if (transform.position == desiredPos)
        {
            isMoving = false;
            transform.position = desiredPos;
        }
    }
} 

我将debug.log放在此代码中,并将其放在vector3.right和left中,但永远不会触发。

if (Input.GetKeyUp(KeyCode.RightArrow) ||
    Swipe.swipe == Swipe.SwipeDirection.right)
{
    Debug.Log("This is traacked");
    Swipe.ResetSwipe();
    right = 0;
}
if (Input.GetKeyUp(KeyCode.LeftArrow) ||
    Swipe.swipe == Swipe.SwipeDirection.left)
{
    Debug.Log("This is traacked");
    Swipe.ResetSwipe();
    left = 0;
}

这是Swipe脚本的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Swipe : MonoBehaviour
{
    private float fingerStartTime = 0.0f;
    private Vector2 fingerStartPos = Vector2.zero;
    private bool isSwipe = false;
    private float minSwipeDist = 50.0f;
    private float maxSwipeTime = 0.5f;
    public enum SwipeDirection
    {
        none,
        up,
        down,
        right,
        left
    }
    public static SwipeDirection swipe;
    void Start()
    {
        swipe = SwipeDirection.none;
    }
    public static void ResetSwipe()
    {
        swipe = SwipeDirection.none;
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.touchCount > 0)
        {
            foreach (Touch touch in Input.touches)
            {
                switch (touch.phase)
                {
                    case TouchPhase.Began:
                        /* this is a new touch */
                        isSwipe = true;
                        fingerStartTime = Time.time;
                        fingerStartPos = touch.position;
                        break;
                    case TouchPhase.Canceled:
                        /* The touch is being canceled */
                        isSwipe = false;
                        break;
                    case TouchPhase.Ended:
                        float gestureTime = Time.time - fingerStartTime;
                        float gestureDist = (touch.position - fingerStartPos).magnitude;
                        if (isSwipe && gestureTime < maxSwipeTime && gestureDist > minSwipeDist)
                        {
                            Vector2 direction = touch.position - fingerStartPos;
                            Vector2 swipeType = Vector2.zero;
                            if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y))
                            {
                                // the swipe is horizontal:
                                swipeType = Vector2.right * Mathf.Sign(direction.x);
                            }
                            else
                            {
                                // the swipe is vertical:
                                swipeType = Vector2.up * Mathf.Sign(direction.y);
                            }
                            if (swipeType.x != 0.0f)
                            {
                                if (swipeType.x > 0.0f)
                                {
                                    // MOVE RIGHT
                                    swipe = SwipeDirection.right;
                                }
                                else
                                {
                                    // MOVE LEFT
                                    swipe = SwipeDirection.left;
                                }
                            }
                            if (swipeType.y != 0.0f)
                            {
                                if (swipeType.y > 0.0f)
                                {
                                    // MOVE UP
                                    swipe = SwipeDirection.up;
                                }
                                else
                                {
                                    // MOVE DOWN
                                    swipe = SwipeDirection.down;
                                }
                            }
                        }
                        break;
                }
            }
        }
    }
}

"更新方法"中的代码对滑动输入的代码我从未被调用或对我从不使用。

非常感谢您阅读我的问题,我希望会有一些人可以帮助我解决这个问题。

如果它像在另一个项目中一样工作,我将确保将脚本附加到游戏对象上。如果将其附加到游戏对象上,请确保它没有标记为无活动,并且您不会将对象转动到脚本中的其他地方。

如果这些情况都不是这样,我也会尝试从对象中删除脚本然后重新触摸它,如果仍然不起作用,请尝试删除脚本将脚本附加到(如果可能的话(,然后再重新创建它并重新计算脚本。

相关内容

  • 没有找到相关文章

最新更新