stakernovi
stakernovi

Reputation: 1

How to fix movement to right and to left?

I lost a lot of time trying to find what is the problem in code but I can not find the solution why my code is not triggered. In my previous game when I implemented this code it worked perfectly, now when i implement into new game this same code for touch movement it doesn't work.

I tried to debug the code and put Debug.Log into Update method and when i swipe over screen it doesn't even get trigger.

This is the code:

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;
        }
    }
} 

I put Debug.Log in this code and in vector3.right and left but it never get triggered.

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;
}

This is the code for Swipe script

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;
                }
            }
        }
    }
}

The code in Update method for swipe input which I debug never get called or never work for me.I can not understand what i am doing wrong because the same code actually works in my previous game.

Thank you so much for reading my question I hope there will be some guy who can help me to solve this issue.

Upvotes: 0

Views: 169

Answers (1)

Dest
Dest

Reputation: 459

The problem is that you actually doing the same thing for left and right movement:

Left:

desiredPos = transform.position + Vector3.left * 1.52f;

Right:

desiredPos = transform.position - Vector3.right * 1.52f;

"+Vector3.left" is the same as "-Vector3.right", because left is (-1,0,0) and right is (1,0,0). So in both cases you end up adding the same vector (-1,0,0) to your position, because you have plus sign before Vector3.left to go left, and minus sign before Vector3.right to go right.

So you need to use the same sign in both cases (plus or minus), or the same vector (right or left)

Upvotes: 1

Related Questions