0
\$\begingroup\$

I want to get rid of a co-routine and do this with a void.

How could I convert his IEnumerator into a void?

private IEnumerator pChangeFoV()
{
    float zValue =70f;

    for (float t = 0f; t < FoVDuration; t += Time.deltaTime)
    {
        float fNew = Mathf.Lerp(_camera.fieldOfView, zValue, t / FoVDuration);
        _camera.fieldOfView = fNew;
        yield return 0;
    }
    _camera.fieldOfView = zValue;
}

Thank you for the help!

\$\endgroup\$

1 Answer 1

2
\$\begingroup\$

Short answer:

private void pChangeFoV()
{
    float zValue =70f;

    for (float t = 0f; t < FoVDuration; t += Time.deltaTime)
    {
        float fNew = Mathf.Lerp(_camera.fieldOfView, zValue, t / FoVDuration);
        _camera.fieldOfView = fNew;
    }
    _camera.fieldOfView = zValue;
}

I just removed the yield keyword, since it is a special keyword that states that the statement, this case a method, is an iterator (IEnumerator, or T Generic IEnumerator).

Nonetheless, by turning it into void, you are losing the smooth FOV change you wanted to achieve. To turn the functionality into a void, I'd do something like this:

private bool smoothChange = true;
private float zValue = 70f;
private float t = 0.0f;

private void Update()
{
    if(smoothChange) pChangeFoV();
}

private void pChangeFoV()
{
    _camera.fieldOfView = Mathf.Lerp(_camera.fieldOfView, zValue, t);
    t += Time.deltaTime / FoVDuration;

    if(t >= 1.0f)
    {
        _camera.fieldOfView = zValue;
        smoothChange = false;
    }
}

Although I'd rather use coroutines for these kinds of functionalities.

\$\endgroup\$
2
  • \$\begingroup\$ Thank you, but isn't there a typo in your code? You are lerping from "_camera.fieldOfView" to "t". Is that correct?? I don't see how you take the target field-of-view "zValue" into account. If I am wrong, could you perhaps comment your code in order to explain what you're doing? \$\endgroup\$ Commented Feb 19, 2019 at 19:08
  • 1
    \$\begingroup\$ Indeed, it was a typo, it is corrected already. Thanks \$\endgroup\$ Commented Feb 19, 2019 at 19:18

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.