Как стать автором
Обновить

Комментарии 11

Спасибо за перевод, конечно. Но мне кажется, что пользы от такого перевода не на много больше самого оригинала. Худо-бедно с техническим английским текстом должен справиться даже начинающий разработчик на Unity3D.
Добавить реальных примеров — уже совсем другое дело будет.
Совершенно согласен.
К сожалению, я заинтересовался Unity3D не далее как неделю назад. И сейчас при ознакомлении с документацией очень часто передо мной встаёт вопрос — где размещать те или иные скрипты (передвижение персонажа, расчёт его скорости и ускорения, перемещение камеры).
Т.к. вопрос достаточно тривиален, и (я думаю) многие задают его себе на том или ином этапе, я решил не задавать ещё один вопрос в куче существующих, а попробовать ответить на него самому. Кроме того, английский язык для меня является очень большой проблемой, и думаю, что не для меня одного. Как раз для таких людей я и публиковал перевод.
Из за малого срока знакомства с Unity3D я не могу привести реальных примеров, которые могли-бы проиллюстрировать этот текст.
Если у кого-нибудь будут такие примеры, и они захотят ими поделиться — я обязательно включу их в текст статьи (естественно, если пример реально будет иллюстрировать ту или иную ситуацию).
Про FixedUpdate написан бред:
*) как раз наоборот этот метод вызывается фиксированное число раз в секунду и вызывается гораздо реже, чем Update (который вызывается максимальное количество раз в секунду, равное fps).
*) Вызывается столько раз в секунду, сколько раз симулируется физика — есть параметр в настройках, определяющий это количество (нужна более точная физика — нужно увеличить настройку, но тогда потеряется общее быстродействие, vice versa).
*) В FixedUpdate нельзя вешать ничего тяжелого, потому что игру начинает ощутимо дергать.

Вывод — лучше в принципе не используйте этот метод, лучше сделайте coroutine-ы или настоящие Thread-ы, если понимаете все проблемы многопоточного доступа к данным unity3d.
про второй Ваш пункт я указал в предисловии к переводу
Там написано не совсем верно — нужно выносить все тяжелые вещи в Update (или размазывать по coroutine-ам), ибо проседание fps-ов не не сильно сказывается на общей плавности (если результирующий fps больше частоты вызова FixedUpdate) из-за использования в расчетах дельты времени и относительно высокого быстродействия текущего железа.
Я немного перефразировал вступительное слово…
Честно говоря, до перевода этой статьи я просто не знал о Сопрограммах… сейчас немного ознакомился с этим разделом, и признаю что Вы совершенно правы.
Спасибо большое за Ваши комментарии =)
И опять замечание :) Coroutine — это просто кусок кода, выполняемый в основном потоке. Это очень важно понимать, потому что просто вынести тяжелый расчет в сопрограмму и посчитать, что все будет хорошо — в корне неверно, вычисления просто забьют поток точно так же, как и если бы они выполнялись в Update или еще где-то в стандартных методах. Нужно разбивать вычисления на итерации так, чтобы при повторной итерации процесс продолжился бы. Весь смысл сопрограмм — автоматизация вызова этих итераций на каждом цикле отрисовки.
Например:
IEnumerator FindBozons() {
    var isFound = false;
    var colliderSectionID = 0;
    var colliderSectionCount = 10;
    while (!isFound) {
        // Обрабатываем только одну секцию за раз, чтобы снизить нагрузку
        isFound = ProcessDataFromSection(colliderSectionID);
        colliderSectionID = (colliderSectionID ++) % colliderSectionCount;
        yield return null;
    }
    // Покупаем яхты / пароходы
    // Сопрограмма завершается
}

void Start() {
    StartCoroutine(FindBozons());
}

Механизм сопрограмм обеспечит автоматическое сохранение состояние контекста исполнения функции и возврат в место прерывания (yield).
хм… думаю это уже в отдельной теме по сопрограммам нужно оговаривать…
чуть позже добавлю Ваш текст в послесловие после перевода
>> нужна более точная физика — нужно увеличить настройку, но тогда потеряется общее быстродействие
Какую? :)
docs.unity3d.com/Documentation/Components/class-TimeManager.html — «Fixed Timestep», Только не увеличить, а уменьшить (количество срабатываний увеличится). Так же стоит покрутить настройки солверов физики: docs.unity3d.com/Documentation/Components/class-PhysicsManager.html
Я не знаю как Вы, но я пока тестовый проект который при установке загружается не прошел я не смог продолжить осваивать платформу.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации