Привет.
Двигаю картинки корутинами в юньке, и блин подтормаживает движение. Не пойму почему. Может ли это быть из-за того, что я двигаю корутинами, а не в Update()-функции ?
В чём еще может быть причина тормозов ?
P.S. На экране движется только одна картинка.
Заранее благодарю.
Нет, дело не в корутинах.
Как-то раз столкнулся с подобным необъяснимым подтормаживанием, которое оказалось следствием того, что сцена состояла из нескольких независимых кусков, отдаленных друг от друга на несколько тысяч world units. После сокращения этого расстояния до тысячи проблема исчезла.
как часто корутина срабатывает? Какой код в корутине? Повешен ли на объекта колайдер и риджидбоди?
ZeebaEata
У меня такого нет.
Phoenics
Один раз запускаюю. Проверял вроде что запускается единожды
код корутины (из AutoMotion plugin)
public static IEnumerator MoveTo(this Transform transform, Vector3 target, float duration, Easer ease)
{
float elapsed = 0;
var start = transform.localPosition;
var range = target - start;
while (elapsed < duration)
{
elapsed = Mathf.MoveTowards(elapsed, duration, Time.deltaTime);
transform.localPosition = start + range * ease(elapsed / duration);
yield return null;
}
transform.localPosition = target;
}Код запуска корутины:
StartCoroutine(AnimateCardAppearance( () => { } );
IEnumerator AnimateCardAppearance(UnityAction onAnimationFinished)
{
counter++;
Debug.Log("D:"+counter);
DrawnCard.GetComponent<PlayerHandCardControl>().enabled = false;
yield return StartCoroutine(DrawnCard.transform.MoveTo(Vector3.zero, 0.5f));
yield return new WaitForSeconds(0.5f);
onAnimationFinished.Invoke();
}Gladiator
> while (...)
> {
> ...
> [b]yield return null;[/b]
> }
Попробуй yield return new WaitForFixedUpdate();
Никус
> Попробуй yield return new WaitForFixedUpdate();
надо WaitForEndOfFrame, раз уж в коде учитывается Time.deltaTime, т.е. обновление позиции будет каждый кадр. Если же нужно обновлять позицию с каждым апдейтом физики, тогда уже используется WaitForFixedUpdate и Time.fixedDeltaTime
Корутина у тебя каждый кадр апдейтится, и ты так и не написал привязан ли к объекту который ты двигаешь колайдер и/или риджидбоди, если риджидбоди привязан то стаит ли там флаг кинематик?
Если корутину не запускать то тормозов нет?
Phoenics
Нет никакого коллайдер. Есть просто Image(который от нового UI). Просто картинка.
> Если корутину не запускать то тормозов нет?
Мне сложно сказать, потому что ничего не двигается.. По профайлеру видно что есть небольшие всплески возможно это во время подлагивания..
Нашёл решение:
Тут или баг или что, но в общем это из-за DirectX. Запускаю Юнити через: Unity.exe -force-opengl подлагивания прекращаются
Тема в архиве.