Как я могу медленно играть в пинг-понг между двумя значениями -3 и 3? - PullRequest
0 голосов
/ 19 июня 2020
void Update()
    {
        float slow = Mathf.PingPong(Time.deltaTime * 5, 6);
        material.SetFloat("_DissolveAmount", slow);
    }

Начальное значение _DissolveAmount равно -3, и я хочу, чтобы он плавно играл в пинг-понг между -3 и 3, чтобы не делать пинг-понг каждые X секунд, но чтобы значения менялись медленно.

1 Ответ

0 голосов
/ 19 июня 2020

Mathf.PingPong возвращает значения между 0 и заданным length.

Вы уже передали 6, поэтому вам нужно только сдвинуть его назад на -3.

Или в качестве альтернативы используйте Mathf.Lerp и используйте PingPong от 0 до 1 в качестве коэффициента для большей гибкости.

Вы также проходите Time.deltaTime * 5 но PingPong ожидает абсолютное значение времени в качестве входных данных, поэтому используйте Time.time.

PingPong требует, чтобы значение t было с самоинкрементом значение, например Time.time и Time.unscaledTime.

Умножив его на 5, вы сделаете его в 5 раз быстрее .. если вы хотите, чтобы он был медленным, вы, вероятно, захотите разделить как

// only needed if using Lerp
public float minValue = -3;
public float maxValue = 3;

public float durationInSeconds = 5;

void Update()
{
    var value = Mathf.PingPong(Time.time / durationInSeconds, 6) - 3;
    // Or using Lerp
    //float value = Mathf.Lerp(minValue, maxValue, Mathf.PingPong(Time.time / durationInSeconds, 1));
    material.SetFloat("_DissolveAmount", value);
}

Что касается того, как исчезнуть один раз от -3 до 3

, я бы использовал сопрограмму, например

private bool alreadyFading;

IEnumerator FadeOnce(float from, float to, float duration) 
{ 
    alreadyFading = true;

    var timePassed = 0f; 
    while(timePassed < duration)
    { 
        var factor = timePassed / duration; 
        var value = Mathf.Lerp(from, to, factor; 

        material.SetFloat("_DissolveAmount", value); 

       yield return null; 
   } 

    material.SetFloat("_DissolveAmount", to); 

    alreadyFading = false;
}

И назову ее, например,

public void Fade()
{
    if(!alreadyFading) StartCoroutine (FadeOnce(-3, 3, 5f);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...