Hi, I am using the following code to make the character move to the position clicked on.
using UnityEngine;
using System.Collections;
public class MoveCharacter2Clicked : MonoBehaviour {
private Transform myTransform; // this transform
private Vector3 destinationPosition; // The destination Point
private float destinationDistance; // The distance between myTransform and destinationPosition
private float originalMoveSpeed;
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
originalMoveSpeed = moveSpeed;
}
void Update() {
// keep track of the distance between this gameObject and destinationPosition
destinationDistance = Vector3.Distance(destinationPosition, myTransform.position);
// Moves the Player if the Left Mouse Button was clicked
if ((Input.GetMouseButtonDown(0) || 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;
Debug.Log(ray);
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;
}
}
// To prevent code from running if not needed
if(destinationDistance > .5f) {
moveSpeed = originalMoveSpeed;
myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
else { // To prevent shakin behavior when near destination
moveSpeed = 0;
}
}
}
It works great when the terrain is completely flat, but if I increase the height of the terrain, the character falls through, ignoring the ground and into the abyss.
Is there anything I am doing wrong?
Thank you!