Tuesday, 15 September 2015

click to move 3d object using lerp unity c#

using UnityEngine;
using System.Collections;

public class ClickToMove2 : MonoBehaviour {
    //flag to check if the user has tapped / clicked
    //Set to true on clickReset 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;

    public GameObject moveObject// GameObject if you want to move
    void Start(){
        //save the y axis value of gameobject
        yAxis = moveObject.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 positionreset 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(moveObject.transform.position.magnitudeendPoint.magnitude)){ //&& !(V3Equal(transform.positionendPoint))){
            //move the gameobject to the desired position
            moveObject.transform.position = Vector3.Lerp(moveObject.transform.positionendPoint1/(duration*(Vector3.Distance(gameObject.transform.positionendPoint))));
        }
        //set the movement indicator flag to false if the endPoint and current gameobject position are equal
        else if(flag && Mathf.Approximately(moveObject.transform.position.magnitudeendPoint.magnitude)) {
            flag = false;
            Debug.Log("I am here. Click on some other point");
        }
        
    }
}




No comments:

Post a Comment