2014-09-03 2 views
4

Я ищу решение, как сделать идеальную щепотку зум в Unity, перемещая камеру вдоль вперед:Как сделать идеальную щепотку масштабирования (Unity 3D)

Настройки: горизонтальной плоскости с центром в точке происхождение со всеми игровыми объектами. Перспективная камера с FOV 10, смещенная на (10,10,10), смотрящая вниз под углом 45 градусов, так что она смотрит на начало координат (есть также поворот на 45 градусов вокруг оси, направленной вверх, для достижения этого) ,

Что мне нужно: Когда я помещаю два пальца на экран, я касаюсь двумя GameObjects с ними - так что координаты экрана под пальцами соответствуют определенным мировым координатам. Когда я делаю движение щепотку (перемещая два пальца или только один), я хочу, чтобы новые координаты экрана соответствовали тем же мировым координатам, которые находились под пальцами в начале всего взаимодействия. Чтобы упростить еще больше - всякий раз, когда я касаюсь экрана двумя пальцами, я хочу, чтобы координаты мира, соответствующие координатам экрана под моими пальцами, всегда оставались под пальцами (позволяя очень небольшой погрешность).

Примером этого идеального увеличения, для которого я ищу, можно увидеть в мобильной игре Boom Beach от Supercell.

Я уже пробовал перемещать камеру вдоль его вперед и менять ее, и я получаю довольно хорошие результаты, но в значительной степени всегда GameObjects под «скольжением» из-под моих пальцев, то есть в некоторых точках больше нет под ними. Было бы здорово, если бы было математическое решение этого, но если необходимо вычислить ответ (например, через некоторый поиск), то это совершенно нормально.

Если установка/сценарий не ясна, я мог бы предоставить некоторые эскизы, чтобы уточнить это немного больше.

Надеюсь, кто-то может мне помочь! :)

ответ

0

Я бы установил систему, которая обнаруживает, когда пользователь увеличивает или уменьшает масштаб, если вы используете GameObjects, чтобы точно определить, где эти пальцы легко сделать с Vector3.distance. После этого я сделаю функцию, которая приближает камеру к желаемому уровню масштабирования с помощью Vector3.MoveTowards (положение камеры, желаемое положение, скорость движения), где я бы установил «скорость движения» как mathf.sqrt (vector3 .distance (положение камеры, желаемое положение)); Что касается «желаемого положения», я бы установил вектор Vector3 (position) как часть линии между двумя игровыми объектами, которые представляют ваш максимальный и минимальный уровень масштабирования. EDIT: при этом у вас должна быть очень хорошая система камеры

Смежные вопросы