2016-01-03 4 views
0

Я провожу несколько игровых объектов (с помощью LeanTween) и хочу, чтобы время было короче, если расстояние между точками расстояния a и b короче. Раньше я писал свой форум для него несколько лет назад, но забыл (duh). Может ли кто-нибудь дать мне подсказку? И есть Mathf.Lerp (или аналогичный) любого использования здесь? Если я использую следующий, он делает прямо противоположное (время становится длиннее, чем короче расстояние, что и я не хочу) ..Время Tween по расстоянию

float time = Mathf.Lerp(source.transform.position.y, target.transform.position.y, Time.time); 

ответ

1

От Документов http://docs.unity3d.com/ScriptReference/Mathf.Lerp.html

открытого статического поплавкового Lerp (плавать, поплавковый б, поплавок т);

Линейно интерполирует между a и b по t. Параметр t зажимается до диапазона [0, 1].

Итак, time переменных в вашей выборке будет равно target.transform.position.y в большинстве случаев, потому что Time.time растет. Вот почему ваше время стало дольше.

После код будет давать уменьшенное время зависела от пройденного расстояния (tweenObject является объектом контролируется LeanTween)

float time = Mathf.Lerp(tweenObject.transform.position.y, 
target.transform.position.y, 
source.transform.position.y/tweenObject.transform.position.y); 
+0

Большое спасибо! Это то, что я точно искал! – BadmintonCat

+0

Один вопрос: tweenObject.transform.position и source.transform.position изначально одинаковы. Это означает, что это значение времени необходимо постоянно обновлять во время анимации? – BadmintonCat

+0

Да, вам, вероятно, потребуется обновить его внутри Update(), FixedUpdate() или другой соответствующей функции –

1

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

float speed = 2f; // 2 units per second 

void Update() 
{ 
    Vector3 distance = targetPosition - transform.position; 
    float distanceLen = distance.magnitude; 

    float stepSize = Time.deltaTime * speed; 

    if (stepSize > distanceLen) 
     transform.position = targetPosition; 
    else 
    { 
     Vector3 direction = distance.normalized; 
     transform.position += direction * stepSize; 
    } 
} 
+0

Это работает ОК, но использует обновления для промежуточных кадров. В моем случае я хочу использовать специальный Tweener для использования смягчающих уравнений и других функций. – BadmintonCat

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