- Home /
Move the player(cube) to the enemy(cube) by clicking on enemy?
Hello! How is it possible to make a game object move to another by clicking on that other game object? Something that has to do with Vector3.MoveTowards or something perhaps? any tips?
Yes you can use Vector3.$$anonymous$$oveTowards to move from one object/position to another. Or you could also use Vector3.Lerp. An example of how you would use this:
public Transform target;
function Update () {
transform.position = Vector3.Lerp(transform.position, target.position, Time.time);
}
This will move the object to the target objects position within one second..
I see how this works hmm. But is it possible to make it happen depending on a moveSpeed and when i click on the other object? should i also edit my ClickTo$$anonymous$$ove script i use? this is it:
using UnityEngine; using System.Collections;
public class moveOn$$anonymous$$ouseClick : $$anonymous$$onoBehaviour { 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 = 5;
}
else if(destinationDistance > .5f){ // To Reset Speed to default
moveSpeed = 8;
}
// $$anonymous$$oves the Player if the Left $$anonymous$$ouse Button was clicked
if (Input.Get$$anonymous$$ouseButtonDown(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;
}
}
// $$anonymous$$oves the player if the mouse button is hold down
else if (Input.Get$$anonymous$$ouseButton(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.$$anonymous$$oveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
// To prevent code from running if not needed
if(destinationDistance > .5f){
myTransform.position = Vector3.$$anonymous$$oveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
}
}
Answer by vond2 · Mar 09, 2013 at 03:56 PM
You can use the Transform.Translate function (of the Player cube). You should specify the direction (enemyPosition - playerPosition) and the distance.
For example:
Vector3 direction; bool shouldMovePlayer = false;
void OnEnemyPressed() { direction = (enemyGameObject.transform.position - playerGameObject.transform.position).magnitude; shouldMovePlayer = true; }
void Update() { if (shouldMovePlayer) { playerGameObject.transform.Translate(direction * Time.deltaTime); } }
I hope I understood your question correctly :)
Your answer
Follow this Question
Related Questions
Move the player towards the cube to attack. 0 Answers
when mouse is on a object do this 2 Answers
Coding Help 0 Answers
Controlling an animation by dragging a gameObject with the mouse 0 Answers
Destroy object with more clicks depending on Scale? 0 Answers