Редактировать: Новый ответ, основанный на новом информативе
Я сохраню старый ответ, поскольку код без него не работает, если, как следует из заголовка, желаемым поведением будет "перемещение в сторону положения мыши".
Проблема
Вы пытаетесь заставить объект совершать те же движения, что и мышь, но написанный код принимает положение мыши, а не движениемыши, и движется к ней.
Решение
Вы должны проверить ось мыши и применить это направление движения к объекту, что-то вроде:
float speed = 5f;
void Update()
{
if (Input.GetMouseButton(0))
{
var moveDirection = new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y"));
transform.position += moveDirection * speed * Time.deltaTime;
}
}
Старый ответ
Проблема
Я предполагаю, что ваш Lerp не делает то, что вы хотите, поскольку код будет выполняться только один раз, и устанавливает вашу позицию в Time.deltaTime * 5, что должно быть примерно 0,9, что означает 90% расстояния от transform.position
до hitPoint
.Для получения дополнительной информации о Lerping, пожалуйста, прочитайте документацию :
Vector3 Lerp (Vector3 a, Vector3 b, float t);
- Когда t= 0: возвращает.
- Когда t = 1, возвращается b.
- Когда t = 0,5 возвращает точку на полпути между a и b.
Решение
Я думаю простой Vector3.MoveTowards будет работать для вас:
Vector3 hitPoint;
float speed = 5;
void Update()
{
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float enter = 0.0f;
if (m_Plane.Raycast(ray, out enter))
{
hitPoint = ray.GetPoint(enter);
transform.position = Vector3.MoveTowards(transform.position, hitPoint, speed * Time.deltaTime);
}
}
}