Комментарии 11
Спасибо за перевод, конечно. Но мне кажется, что пользы от такого перевода не на много больше самого оригинала. Худо-бедно с техническим английским текстом должен справиться даже начинающий разработчик на Unity3D.
Добавить реальных примеров — уже совсем другое дело будет.
Добавить реальных примеров — уже совсем другое дело будет.
Совершенно согласен.
К сожалению, я заинтересовался Unity3D не далее как неделю назад. И сейчас при ознакомлении с документацией очень часто передо мной встаёт вопрос — где размещать те или иные скрипты (передвижение персонажа, расчёт его скорости и ускорения, перемещение камеры).
Т.к. вопрос достаточно тривиален, и (я думаю) многие задают его себе на том или ином этапе, я решил не задавать ещё один вопрос в куче существующих, а попробовать ответить на него самому. Кроме того, английский язык для меня является очень большой проблемой, и думаю, что не для меня одного. Как раз для таких людей я и публиковал перевод.
Из за малого срока знакомства с Unity3D я не могу привести реальных примеров, которые могли-бы проиллюстрировать этот текст.
Если у кого-нибудь будут такие примеры, и они захотят ими поделиться — я обязательно включу их в текст статьи (естественно, если пример реально будет иллюстрировать ту или иную ситуацию).
К сожалению, я заинтересовался Unity3D не далее как неделю назад. И сейчас при ознакомлении с документацией очень часто передо мной встаёт вопрос — где размещать те или иные скрипты (передвижение персонажа, расчёт его скорости и ускорения, перемещение камеры).
Т.к. вопрос достаточно тривиален, и (я думаю) многие задают его себе на том или ином этапе, я решил не задавать ещё один вопрос в куче существующих, а попробовать ответить на него самому. Кроме того, английский язык для меня является очень большой проблемой, и думаю, что не для меня одного. Как раз для таких людей я и публиковал перевод.
Из за малого срока знакомства с Unity3D я не могу привести реальных примеров, которые могли-бы проиллюстрировать этот текст.
Если у кого-нибудь будут такие примеры, и они захотят ими поделиться — я обязательно включу их в текст статьи (естественно, если пример реально будет иллюстрировать ту или иную ситуацию).
Про FixedUpdate написан бред:
*) как раз наоборот этот метод вызывается фиксированное число раз в секунду и вызывается гораздо реже, чем Update (который вызывается максимальное количество раз в секунду, равное fps).
*) Вызывается столько раз в секунду, сколько раз симулируется физика — есть параметр в настройках, определяющий это количество (нужна более точная физика — нужно увеличить настройку, но тогда потеряется общее быстродействие, vice versa).
*) В FixedUpdate нельзя вешать ничего тяжелого, потому что игру начинает ощутимо дергать.
Вывод — лучше в принципе не используйте этот метод, лучше сделайте coroutine-ы или настоящие Thread-ы, если понимаете все проблемы многопоточного доступа к данным unity3d.
*) как раз наоборот этот метод вызывается фиксированное число раз в секунду и вызывается гораздо реже, чем Update (который вызывается максимальное количество раз в секунду, равное fps).
*) Вызывается столько раз в секунду, сколько раз симулируется физика — есть параметр в настройках, определяющий это количество (нужна более точная физика — нужно увеличить настройку, но тогда потеряется общее быстродействие, vice versa).
*) В FixedUpdate нельзя вешать ничего тяжелого, потому что игру начинает ощутимо дергать.
Вывод — лучше в принципе не используйте этот метод, лучше сделайте coroutine-ы или настоящие Thread-ы, если понимаете все проблемы многопоточного доступа к данным unity3d.
про второй Ваш пункт я указал в предисловии к переводу
Там написано не совсем верно — нужно выносить все тяжелые вещи в Update (или размазывать по coroutine-ам), ибо проседание fps-ов не не сильно сказывается на общей плавности (если результирующий fps больше частоты вызова FixedUpdate) из-за использования в расчетах дельты времени и относительно высокого быстродействия текущего железа.
Я немного перефразировал вступительное слово…
Честно говоря, до перевода этой статьи я просто не знал о Сопрограммах… сейчас немного ознакомился с этим разделом, и признаю что Вы совершенно правы.
Спасибо большое за Ваши комментарии =)
Честно говоря, до перевода этой статьи я просто не знал о Сопрограммах… сейчас немного ознакомился с этим разделом, и признаю что Вы совершенно правы.
Спасибо большое за Ваши комментарии =)
И опять замечание :) Coroutine — это просто кусок кода, выполняемый в основном потоке. Это очень важно понимать, потому что просто вынести тяжелый расчет в сопрограмму и посчитать, что все будет хорошо — в корне неверно, вычисления просто забьют поток точно так же, как и если бы они выполнялись в Update или еще где-то в стандартных методах. Нужно разбивать вычисления на итерации так, чтобы при повторной итерации процесс продолжился бы. Весь смысл сопрограмм — автоматизация вызова этих итераций на каждом цикле отрисовки.
Например:
Механизм сопрограмм обеспечит автоматическое сохранение состояние контекста исполнения функции и возврат в место прерывания (yield).
Например:
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
Я не знаю как Вы, но я пока тестовый проект который при установке загружается не прошел я не смог продолжить осваивать платформу.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Порядок событий в Unity3D