I’m writing a character control script for a top-down RPG, and want my character to move towards the mouse position whenever I click or hold the mouse button down:
using UnityEngine;
using System.Collections;
public class Movement : MonoBehaviour {
//Player movement speed
public float movementSpeed = 10.0f;
//Player height
public float height = 0.5f;
//Target position
Vector3 targetPosition;
void Start()
{
//Setting target position to current position upon game start
targetPosition = transform.position;
}
// Update is called once per frame
void Update ()
{
//When user presses left mouse button
if(Input.GetMouseButton(0))
{
//Update target position
targetPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
//Movement code attempt 1 (obviously I don't use both at the same time, I've merely tried both:
transform.position = transform.position + (targetPosition - transform.position).normalized * movementSpeed * Time.deltaTime;
//Movement code attempt 2:
transform.position = Vector3.Lerp(transform.position, targetPosition, (Time.deltaTime*movementSpeed));
}
}
It works just fine, aside from that my character moves slower when traveling shorter distances, and faster when traveling longer distances. I can understand why this happens, as the movement time is constant no matter how far you travel, but I’m not sure how to fix that - I want the movement speed to be the same no matter what. I’ve tried both approaches above and in both cases this happens.
I took a look at some other similar questions in here, but found nothing that worked in this case. Any ideas?