Страница 1 из 1

Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 11:06
CubeSide
Создаю раннер под Android , столкнулся с такой проблемой . При движении дергаются препятствия .

P.S. извиняюсь за надпись пробной версии.
Думал что это может быть дерганное движение самого игрока или камеры , менял скрипт движения, но подергивания оставались .

Cкрипт движения:
private void LateUpdate()
{
//Движение камеры за игроком
camer.transform.position = new Vector3(0, 22, transform.position.z - 10 );

}
private void FixedUpdate()
{
// движение игрока
rb.AddForce(Vector3.forward * speedForw * Time.fixedDeltaTime*10);
}

Проверил Profiler и заметил что GPU очень нагружен , но не очень понимаю с чем именно это связано.
Изображение

Помогите кто чем может . Буду рад любому ответу .Спасибо

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 12:17
Jarico
Крч... Т.к. все вычисления у тебя в FixedUpdate то частота обновления не совпадает с частотой рендеринга... Простыми словами у тебя физика тикает с меньшим временем чем рисуются кадры..

Update вызывается каждый кадр а FixedUpdate вызывается через определенные промежутки времени (Time.fixedDeltaTime) (чтобы получить сколько раз в секунду -> 1/Time.fixedDeltaTime = ticks per second)


По стандарту в Unity физика тикает с частотой 50 тиков в секунду а кадры рисуются с разной частотой и зависят от возможностей устройста и нагрузок, к примеру FPS может либо подскочить либо просесть из-за нагрузки и расчёты будут различаться т.к. дельта времени изменилась а в FixedUpdate дельта постоянна и расчёты будут одинаковыми вне зависимости от нагрузки устройства

Вот такое часто бывает что Rigidbody с коллайдером проскакивает сквозь другой коллайдер - это потому что расчёты выполнялись в Update а коллайдеры обновляются вместе с физикой т.е. когда вызывается FixedUpdate


Рекомендация:
Увеличить время тика физики ( Time.fixedDeltaTime = 1/60 = 0.016, 60 - это тиков в секунду (равно 60 кадрам в секунду), 0.016 это промежуток времени между тиками физики)

Если устройство выдаёт больше 60 фпс нужно ограничить его Application.targetFrameRate = 60

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 12:25
CubeSide
Jarico писал(а):Крч... Т.к. все вычисления у тебя в FixedUpdate то частота обновления не совпадает с частотой рендеринга... Простыми словами у тебя физика тикает с меньшим временем чем рисуются кадры..

Update вызывается каждый кадр а FixedUpdate вызывается через определенные промежутки времени (Time.fixedDeltaTime) (чтобы получить сколько раз в секунду -> 1/Time.fixedDeltaTime = ticks per second)


По стандарту в Unity физика тикает с частотой 50 тиков в секунду а кадры рисуются с разной частотой и зависит от возможностей устройста и нагрузок, к примеру FPS может либо подскочить либо просесть из-за нагрузки и расчёты будут различаться т.к. дельта времени изменилась а в FixedUpdate дельта постоянна и расчёты будут одинаковыми вне зависимости от нагрузки устройства


Рекомендация:
Увеличить время тика физики ( Time.fixedDeltaTime = 1/60 = 0.016, 60 - это тиков в секунду (равно 60 кадрам в секунду), 0.016 это промежуток времени между тиками физики)

Если устройство выдаёт больше 60 фпс нужно ограничить его Application.targetFrameRate = 60


Спасибо за помощь , понял проблему. Не подскажешь где поменять время тика физики , в самом редакторе или в скрипте ?

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 12:30
Jarico
CubeSide писал(а):Спасибо за помощь , понял проблему. Не подскажешь где поменять время тика физики , в самом редакторе или в скрипте ?


Time.fixedDeltaTime - можно изменить либо через скрипт либо через редактор

В редакторе:

Project Settings -> Time -> Fixed Timestep (def. 0.015)

В скрипте:
Синтаксис:
Используется csharp
public int tickrate = 66; //66 тиков в секунду

void Start()
{
Time.fixedDeltaTime = (float)1/(float)66; (обязательно нужно float, ибо установится значение 0.00000001    и редактор зависнет сожрав оперативную память и используя проц на 100%)
}
 

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 13:42
CubeSide
Jarico писал(а):
CubeSide писал(а):Спасибо за помощь , понял проблему. Не подскажешь где поменять время тика физики , в самом редакторе или в скрипте ?


Time.fixedDeltaTime - можно изменить либо через скрипт либо через редактор

В редакторе:

Project Settings -> Time -> Fixed Timestep (def. 0.015)

В скрипте:
Синтаксис:
Используется csharp
public int tickrate = 66; //66 тиков в секунду

void Start()
{
Time.fixedDeltaTime = (float)1/(float)66; (обязательно нужно float, ибо установится значение 0.00000001    и редактор зависнет сожрав оперативную память и используя проц на 100%)
}
 


К сожалению не сильно помогло , но спасибо большое за помощь. В движении игрока пытался менять значения fixedDeltaTime на deltaTime , умножал на 10 и то и то. Ничего не помогло.

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 19:39
seaman
Попробуй поставь интерполяцию у Ригидбоди.
Изображение

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 19:47
CubeSide
seaman писал(а):Попробуй поставь интерполяцию у Ригидбоди.
Изображение

Она была включена

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 20:07
CubeSide
seaman писал(а):Попробуй поставь интерполяцию у Ригидбоди.
Изображение

Спасибо за помощь.
Поменял с Interpolate на Extrapolate и вроде как перестало дергаться . Осталась одна маленькая проблема ,препятствия при приближении должны плавно увеличиваться(т.к становятся ближе к камере) , а они увеличиваются без сглаживания .

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 21:04
AngryCat
CubeSide писал(а):
seaman писал(а):Попробуй поставь интерполяцию у Ригидбоди.
Изображение

Спасибо за помощь.
Поменял с Interpolate на Extrapolate и вроде как перестало дергаться . Осталась одна маленькая проблема ,препятствия при приближении должны плавно увеличиваться(т.к становятся ближе к камере) , а они увеличиваются без сглаживания .

Используй вместо этого: camer.transform.position = new Vector3(0, 22, transform.position.z - 10 ); , Vector3.Lerp(); - будет плавно)

Re: Дергаются препятствия при движении игрока (Runner)

СообщениеДобавлено: 27 фев 2019, 21:44
CubeSide
AngryCat писал(а):
CubeSide писал(а):
seaman писал(а):Попробуй поставь интерполяцию у Ригидбоди.
Изображение

Спасибо за помощь.
Поменял с Interpolate на Extrapolate и вроде как перестало дергаться . Осталась одна маленькая проблема ,препятствия при приближении должны плавно увеличиваться(т.к становятся ближе к камере) , а они увеличиваются без сглаживания .

Используй вместо этого: camer.transform.position = new Vector3(0, 22, transform.position.z - 10 ); , Vector3.Lerp(); - будет плавно)

Благодарю .