I am currently trying left & right, up & down swipe motion in unity C#.
I have done the scripting, it all working,
but after I debug the script, the object's position suddenly changed to a very weird number:
from (-3, 0, 3) changed to (-3.000004, 0.00000464, 2.99999).
And I intend to move just 1 unit every time i swipe, but the unit seems different; it always move around 1 but not exact 1 (Ex: maybe like 0.9954, or like 1.002931).
How I set the initial position to be an exact integer number, and also move only 1 unit every time I swipe?
using UnityEngine;
public class Player : MonoBehaviour
{
private Vector3 startTouchPosition, endTouchPosition;
private Vector3 startRocketPosition, endRocketPosition;
private float flyTime;
public float speed = 1f;
bool canMove;
void Start()
{
transform.position = new Vector3(-3, 0, 3);
}
void Update()
{
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
startTouchPosition = Input.GetTouch(0).position;
}
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
{
endTouchPosition = Input.GetTouch(0).position;
float xDifference = Mathf.Abs(endTouchPosition.x - startTouchPosition.x);
float yDifference = Mathf.Abs(endTouchPosition.y - startTouchPosition.y);
if ((endTouchPosition.x < startTouchPosition.x) && xDifference >= yDifference && transform.position.x > -5.5f)
{
//StartCoroutine(Fly("left"));
MoveLeft();
}
else if ((endTouchPosition.x > startTouchPosition.x) && xDifference >= yDifference && transform.position.x < -0.5f)
{
//StartCoroutine(Fly("right"));
MoveRight();
}
else if ((endTouchPosition.y > startTouchPosition.y) && yDifference >= xDifference && transform.position.z < 5.5f)
{
//StartCoroutine(Fly("up"));
MoveUp();
}
else if ((endTouchPosition.y < startTouchPosition.y) && yDifference >= xDifference && transform.position.z > 0.5f)
{
//StartCoroutine(Fly("down"));
MoveDown();
}
}
if (canMove)
{
transform.position = Vector3.Lerp(startRocketPosition, endRocketPosition, speed * Time.deltaTime);
canMove = false;
}
}
{
startRocketPosition = transform.position;
endRocketPosition = new Vector3(startRocketPosition.x - 10f, 0, transform.position.z);
canMove = true;
}
void MoveRight()
{
startRocketPosition = transform.position;
endRocketPosition = new Vector3(startRocketPosition.x + 10f, 0, transform.position.z);
canMove = true;
}
void MoveUp()
{
startRocketPosition = transform.position;
endRocketPosition = new Vector3(startRocketPosition.x, 0, transform.position.z + 10f);
canMove = true;
}
void MoveDown()
{
startRocketPosition = transform.position;
endRocketPosition = new Vector3(startRocketPosition.x, 0, transform.position.z -10f);
anMove = true;
}