В вашем случае вы можете заставить свой вызов IEnumerator
ждать, пока другой вызов не будет завершен, просто yield
используя его как
...
// executes and at the same time waits for Spin to finish
yield return Spin(3f, rotation);
// called when Spin routine is finished
anim.SetBool("Roll_Anim", true);
В качестве альтернативы, вместо сторонней библиотеки инструментов как предложено здесь вы можете просто добавить обратный вызов как
IEnumerator Spin(float lerpTime, Quaternion rotation, Action whenDone)
{
float elapsedTime = 0f;
while (elapsedTime <= lerpTime)
{
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, elapsedTime / lerpTime);
elapsedTime += Time.deltaTime;
yield return null;
}
whenDone?.Invoke();
}
и затем запустить подпрограмму, используя лямбда-выражение типа
StartCoroutine(Spin(3f, rotation, () =>
{
anim.SetBool("Roll_Anim", true);
}));
или вызов метода, подобный
private void AfterSpinning()
{
anim.SetBool("Roll_Anim", true);
}
...
StartCoroutine(Spin(3f, rotation, AfterSpinning));