- Home /
How to move gameobject with touch on Android
I'm trying to make a game where you control a character via touch on Android devices.
The player will have two degrees of movement.
When you touch the touch screen and move your finger, the game object should move to your finger's location and follow your finger as you move it.
Here is an example of what I'm trying to do: http://www.youtube.com/watch?v=OoqRC8QptzM#t=01m01s (@ 1:02).
I already know I need to use Input.touches.
I've tried using Transform.translate and Vector3.Lerp, neither gave me the results I wanted.
Here is some of the code I've tried using:
#pragma strict
var speed : float = 1;
function Start () {
}
function Update () {
if (Input.touchCount > 0 &&
Input.GetTouch(0).phase == TouchPhase.Moved) {
// Get movement of the finger since last frame
var touchDeltaPosition:Vector2 = Input.GetTouch(0).deltaPosition;
var touchPosition:Vector3;
touchPosition.Set(touchDeltaPosition.x,
transform.position.y,
touchDeltaPosition.y);
// Move object across XY plane
transform.position = Vector3.Lerp(transform.position,
touchPosition,
Time.deltaTime*speed);
}
}
Answer by falconer · Dec 01, 2014 at 12:45 PM
The script below should work perfect
using UnityEngine;
using System.Collections;
public class TapToMove : MonoBehaviour {
//flag to check if the user has tapped / clicked.
//Set to true on click. Reset to false on reaching destination
private bool flag = false;
//destination point
private Vector3 endPoint;
//alter this to change the speed of the movement of player / gameobject
public float duration = 50.0f;
//vertical position of the gameobject
private float yAxis;
void Start(){
//save the y axis value of gameobject
yAxis = gameObject.transform.position.y;
}
// Update is called once per frame
void Update () {
//check if the screen is touched / clicked
if((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0)))
{
//declare a variable of RaycastHit struct
RaycastHit hit;
//Create a Ray on the tapped / clicked position
Ray ray;
//for unity editor
#if UNITY_EDITOR
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//for touch device
#elif (UNITY_ANDROID || UNITY_IPHONE || UNITY_WP8)
ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
#endif
//Check if the ray hits any collider
if(Physics.Raycast(ray,out hit))
{
//set a flag to indicate to move the gameobject
flag = true;
//save the click / tap position
endPoint = hit.point;
//as we do not want to change the y axis value based on touch position, reset it to original y axis value
endPoint.y = yAxis;
Debug.Log(endPoint);
}
}
//check if the flag for movement is true and the current gameobject position is not same as the clicked / tapped position
if(flag && !Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)){ //&& !(V3Equal(transform.position, endPoint))){
//move the gameobject to the desired position
gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, endPoint, 1/(duration*(Vector3.Distance(gameObject.transform.position, endPoint))));
}
//set the movement indicator flag to false if the endPoint and current gameobject position are equal
else if(flag && Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)) {
flag = false;
Debug.Log("I am here");
}
}
}
P.S. Script belongs to The Game Contriver. You can find the article here Move to touch position
Your answer
Follow this Question
Related Questions
How to Touch Drag 3D Objects 2 Answers
Using GUI buttons to move a sprite (C#) 2 Answers
GameObject won't jump with touch 1 Answer
When user touch the screen the object move left right smoothly 1 Answer
The bullet doesn't move correctly 1 Answer