Как переместить объект только по оси Y - PullRequest
0 голосов
/ 21 марта 2020

Теперь вы можете перемещать объект только по локальным координатам (только когда вы нажимаете на объект) вверх и вниз (Y). Мне нужно сделать так, чтобы я мог перемещать объект независимо от нажатия, т. Е. Я могу двигаться в любом месте экрана.

public float dragSpeed = 1f;
Vector3 lastMousePos;

void OnMouseDown( ) {
    lastMousePos = Input.mousePosition;
}

void OnMouseDrag() {
    Vector3 delta = Input.mousePosition - lastMousePos;
    Vector3 pos = transform.position;
    pos.y += delta.y * dragSpeed;
    transform.position = pos;
    lastMousePos = Input.mousePosition;
}

1 Ответ

0 голосов
/ 22 марта 2020

Название вашего вопроса как-то задает вопрос, совершенно противоположный телу вопроса ...

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

Просто сделайте движение в Update. А затем используйте Vector3.MoveTowards. Вам даже не нужно хранить положение мыши и вычислять дельту для этого. MoveTowards уже обрабатывает его для вас.

Обратите внимание, что весь код имеет смысл только в том случае, если вы действительно хотите переместить объекты в экранном пространстве пиксель координаты. Например, если ваш объект находится внутри холста Screespace Overlay. В противном случае вы, вероятно, захотите преобразовать позицию в World-Space, используя

var worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition + Vector3.forward * distanceToCamera);

Также обратите внимание, что в настоящее время ваш код зависит от частоты кадров! Вы перемещаете объект с фиксированной скоростью dragSpeed Units / frame. Вы бы предпочли использовать независимое от частоты кадров значение dragSpeed Units / real-time seconds. Поэтому вы должны использовать Time.deltaTime и отрегулировать значение dragSpeed, которое теперь должно быть больше или меньше 60, чтобы получить тот же эффект.

public float dragSpeed = 60f;

void Update() 
{
    transform.position = Vector3.MoveTowards(transform.position, Input.mousePosition, dragSpeed * Time.deltaTime);
}

Это теперь просто движется с постоянной скоростью к позиции мыши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...