Click To Move
From Unify Community Wiki
Revision as of 12:32, 6 September 2018 by Isaiah Kelly (Talk | contribs)
This script moves a GameObject to the cursor position on mouse click or hold.
C Sharp (C#) Version
/* * Esse Script movimenta o GameObject quando você clica ou * mantém o botão esquerdo do mouse apertado. * * Para usá-lo, adicione esse script ao gameObject que você quer mover * seja o Player ou outro * * Autor: Vinicius Rezendrix - Brasil * Data: 11/08/2012 * * This script moves the GameObject when you * click or click and hold the LeftMouseButton * * Simply attach it to the GameObject you wanna move (player or not) * * Autor: Vinicius Rezendrix - Brazil * Data: 11/08/2012 * */ using UnityEngine; using System.Collections; public class ClickToMove : MonoBehaviour { private Transform myTransform; // this transform private Vector3 destinationPosition; // The destination Point private float destinationDistance; // The distance between myTransform and destinationPosition public float moveSpeed; // The Speed the character will move void Start () { myTransform = transform; // sets myTransform to this GameObject.transform destinationPosition = myTransform.position; // prevents myTransform reset } void Update () { // keep track of the distance between this gameObject and destinationPosition destinationDistance = Vector3.Distance(destinationPosition, myTransform.position); if(destinationDistance < .5f){ // To prevent shakin behavior when near destination moveSpeed = 0; } else if(destinationDistance > .5f){ // To Reset Speed to default moveSpeed = 3; } // Moves the Player if the Left Mouse Button was clicked if (Input.GetMouseButtonDown(0)&& GUIUtility.hotControl ==0) { Plane playerPlane = new Plane(Vector3.up, myTransform.position); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); float hitdist = 0.0f; if (playerPlane.Raycast(ray, out hitdist)) { Vector3 targetPoint = ray.GetPoint(hitdist); destinationPosition = ray.GetPoint(hitdist); Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position); myTransform.rotation = targetRotation; } } // Moves the player if the mouse button is hold down else if (Input.GetMouseButton(0)&& GUIUtility.hotControl ==0) { Plane playerPlane = new Plane(Vector3.up, myTransform.position); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); float hitdist = 0.0f; if (playerPlane.Raycast(ray, out hitdist)) { Vector3 targetPoint = ray.GetPoint(hitdist); destinationPosition = ray.GetPoint(hitdist); Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position); myTransform.rotation = targetRotation; } // myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime); } // To prevent code from running if not needed if(destinationDistance > .5f){ myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime); } } }
JavaScript (JS) Version
Author: Sakar
Usage: Simply attach the script to an object you wish to have move towards the mouse. Change the smooth value to alter the speed at which the object moves.
// Click To Move script // Moves the object towards the mouse position on left mouse click var smooth:int; // Determines how quickly object moves towards position private var targetPosition:Vector3; function Update () { if(Input.GetKeyDown(KeyCode.Mouse0)) { var playerPlane = new Plane(Vector3.up, transform.position); var ray = Camera.main.ScreenPointToRay (Input.mousePosition); var hitdist = 0.0; if (playerPlane.Raycast (ray, hitdist)) { var targetPoint = ray.GetPoint(hitdist); targetPosition = ray.GetPoint(hitdist); var targetRotation = Quaternion.LookRotation(targetPoint - transform.position); transform.rotation = targetRotation; } } transform.position = Vector3.Lerp (transform.position, targetPosition, Time.deltaTime * smooth); }
Behavior
If you want the player to move and correct it's path while holding the mouse button, rather than only doing it when clicking, change "GetKeyDown" to "GetKey" on line 10.