вот небольшой пример
Синтаксис:
Используется csharp
public void SktollRight(GUIType type)
{
if (rectExstectedFrend.xMin >= 0) return;
Manager.mono.StopCoroutine("LerpWidth");
float to = rectExstectedFrend.xMin + panelLerp;
Manager.mono.StartCoroutine(LerpWidth(to, (a, b) => (a < b)));
rectExstectedFrend = new Rect(to, rectExstectedFrend.yMin, rectExstectedFrend.width, rectExstectedFrend.height);
}
IEnumerator LerpWidth(float to, IsLerp isLerp)
{
float x;
do
{
x = Mathf.Lerp(rectFrend.xMin, to, Time.deltaTime * speedLerp);
rectFrend = new Rect(x, rectFrend.yMin, rectFrend.width, rectFrend.height);
yield return null;
}
while (isLerp((int)System.Math.Round(x,System.MidpointRounding.AwayFromZero), (int)to));
}
{
if (rectExstectedFrend.xMin >= 0) return;
Manager.mono.StopCoroutine("LerpWidth");
float to = rectExstectedFrend.xMin + panelLerp;
Manager.mono.StartCoroutine(LerpWidth(to, (a, b) => (a < b)));
rectExstectedFrend = new Rect(to, rectExstectedFrend.yMin, rectExstectedFrend.width, rectExstectedFrend.height);
}
IEnumerator LerpWidth(float to, IsLerp isLerp)
{
float x;
do
{
x = Mathf.Lerp(rectFrend.xMin, to, Time.deltaTime * speedLerp);
rectFrend = new Rect(x, rectFrend.yMin, rectFrend.width, rectFrend.height);
yield return null;
}
while (isLerp((int)System.Math.Round(x,System.MidpointRounding.AwayFromZero), (int)to));
}
суть в том что если запустить 2 корутины которые будет лерпить переменную в разные стороны они зависнут, необходимо отключать все перед стартом, я конечно понимаю что можно сделать булеву переменную для выхода из цикла, но это нарушит всю мою концепцию класса) в конце концов должна же работать и стоп корутина как-то?