перемещение объекта мышью, но не туда, где находится указатель мыши - PullRequest
2 голосов
/ 10 июля 2019

Сцена: scene image

Привет! Я пытаюсь управлять отверстием вдоль оси X и Z с помощью мыши, но не хочу, чтобы отверстие перемещалось в положение мыши

Самолет м_план;

private Vector3 newmousepos;


void Start()

{

    m_Plane = new Plane(Vector3.up, transform.position);

}

void Update()

{
    if (Input.GetMouseButton(0))

    {

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

          float enter = 0.0f;

          if (m_Plane.Raycast(ray, out enter))

           {
               //Get the point that is clicked
               Vector3 hitPoint = ray.GetPoint(enter);

              transform.position = 
              Vector3.Lerp(transform.position,hitPoint,Time.deltaTime*5f);

           }  

    }

1 Ответ

1 голос
/ 10 июля 2019

Редактировать: Новый ответ, основанный на новом информативе

Я сохраню старый ответ, поскольку код без него не работает, если, как следует из заголовка, желаемым поведением будет "перемещение в сторону положения мыши".

Проблема

Вы пытаетесь заставить объект совершать те же движения, что и мышь, но написанный код принимает положение мыши, а не движениемыши, и движется к ней.

Решение

Вы должны проверить ось мыши и применить это направление движения к объекту, что-то вроде:

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);
        }
    }
}


...