To get started create a New Scene and name it whatever you want to. Add a Terrain to this scene or instead, you could add a Plane, it's left to you. Position it a (0, 0, 0). Add some material to it so that you can get a better picture of it’s.
Make sure that this Plane / Terrain that you have created has a Collider component attached to it.
Now add a GameObject of any kind, I'm adding a Sphere, because I'm partial to them. Position it at (0, 0.5, 0). Add a material of a different color to this Sphere.
Add a Directional Light to lighten up the scene.
Set the Main Camera Position to (0, 10, 0), Rotation to (90, 0, 0). Once you are done with that, the setup should look something like:
Create a new C# script named TapToMove. Attach it to the GameObject you've just created. Save the scene and open the script.
Add the below code to it:
using UnityEngine;
using System.<span id="IL_AD1" class="IL_AD">Collections</span>;
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 <span id="IL_AD5" class="IL_AD">duration</span> = 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");
}
}
}
Done! Now you can customize values to get what u want!