Unity увеличивает масштаб GameObject не работает? - PullRequest
0 голосов
/ 11 июня 2019

GameObject:

У меня есть игровой объект "Сфера" со следующими свойствами:

  • Начальная шкала 1,5 (x, y, z).
  • Сценарий, который проверяет, что масштаб находится в диапазоне от 0 до 150.

Что у меня есть:

Теперь я реализовал функцию, которая позволяет пользователю масштабировать GameObject с помощью контроллеров HTC Vive (мы используем виртуальную реальность).

Эта функция проверяет расстояние между контроллерами (часто между -1 и 1, чтобы решить, хотим ли мы увеличить или уменьшить объект).

Поэтому, когда у меня есть это значение от -1 до 1, я масштабирую GameObject на значение, кратное чувствительности (это редактируется в редакторе Unity).

Что я хочу:

Это работает довольно хорошо, хотя я хочу увеличить чувствительность с течением времени не жестко запрограммированным способом. Поэтому, когда GameObject очень маленький, масштабирование будет очень медленным. Когда GameObject довольно большой, масштабирование будет быстрым.

Что я пробовал:

У меня есть это значение (от -1 до 1), тогда я умножу это значение на чувствительность.

Тогда я умножу на текущую / максимальную шкалу.

Однако это вызывает проблему, заключающуюся в том, что увеличение происходит быстрее, чем уменьшение.

Код, который я использую, выглядит следующим образом:

float currentControllerDistance = Vector3.Distance(LeftHand.transform.position, RightHand.transform.position);
float currentZoomAmount = currentControllerDistance - ControllersStartPostionDifference; // Value is between -1 and 1.

currentZoomAmount = currentZoomAmount * ScalingSensitivity; // Multiplying by the value in the Unity Editor.

float currentPercentage = ObjectToScale.transform.localScale.x / ObjectMaximumScale.x; // Current scale percentage in comparison to the maximum scale.

currentZoomAmount = currentZoomAmount * currentPercentage; // Changing the ObjectToScale by adding the currentZoomAmount.
ObjectToScale.transform.localScale = new Vector3(ObjectCurrentScale.x + currentZoomAmount, ObjectCurrentScale.y + currentZoomAmount, ObjectCurrentScale.z + currentZoomAmount);

Кто-нибудь знает, как сделать такое масштабирование?

Спасибо вперед.

1 Ответ

1 голос
/ 12 июня 2019

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

Если в вашем проекте уже используется библиотека анимации, например DOTween, это легко сделать с помощью возможностей этой библиотеки. Если нет, вы можете попробовать использовать уравнение для кубического Безье, который является одной из более простых кривых:

Кубический Безье

Это просто y = x^3, поэтому вы можете попробовать ObjectMaximumScale.x * currentPercentage * currentPercentage * currentPercentage, чтобы получить значение, которое изменяется от 0 до ObjectMaximumScale.x при вводе значения от 0 до 1 соответственно.

...