@Surface-ketch

Дергается движение в 2d игре unity?

Доброго времени суток.
Суть проблемы: есть массив с двумя группами объектов:
1 группа - sprite renderer + boxcollider2d(trigger);
2 группа - boxcollier2d(trigger);
При старте сцены копирую в list и использую оттуда.
for (int i = 0; i < poolFloor.Length; i++)
        {
            GameObject setFloor = (GameObject)Instantiate(poolFloor[i]);
            setFloor.SetActive(false);
            pooledFloor.Add(setFloor);
        }

В апдейте простой скрипт, который двигает объект от правого конца камеры к левому через translate(deltaTime), выключая объект за левым концом камеры и включая возле правого.
void Update () {	
		    maxX = width * -0.5f; 
			speed = -5f - Time.timeSinceLevelLoad * 0.07f; //скоротсь
			for (int i = 0; i < pooledFloor.Count; i++) {
				if (pooledFloor [i].activeInHierarchy) {
				polledTransformObject[i].Translate(Vector3.right * speed * Time.deltaTime); //двигаем объект
				float floorWidth = pooledBoxCollider[i]; //длина объекта(закеширавно в start())

				    float floorRight =  polledTransformObject[i].position.x + floorWidth; //вычисляем крайнюю правую точку объекта

					if (floorRight > maxX) {
						maxX = floorRight;      //находим самую большую точку X
					}

					if (floorRight < cameraLeftX - 1) {
						pooledFloor [i].SetActive (false);  //если объект вышел за левый край камеры, то выключаем
					}   
				}
			}

			if (maxX < cameraRightX+1) {
				NeedNew ();               //если максимальная Х меньше правого конца камеры, активируем новый объект
			}
			
    }

Но все это движение идет рывкам с самого начала, то есть какое-то время гладко, какое-то огромными рывками. В профайлере показывал огромны скачки gfx.waitforpresent, походил по забугорным форумам, по советам включил vsync и уменьшил размер графики, теперь папка с графикой весит 700кб, в юньке склепал ввсе в два атласа: ui и main. Но ситуация на вид вообще никак не изменилась, разве что движение стало более размытым из-за vsync.

В чем еще могут быть причины проблемы?

P.S. Движение дергается как в редакторе, так и на тестовом lumia 535.

Как сейчас выглядит профайлер и настройки:
329b5d706a474dbf99cb310d237bd801.png5ad2550bda5d412489667147f120399b.png6508b346778d4477a31afd4bf9915868.png4f2eb45501d040ca8c689a5144dcef49.png

графика pixel art, настройки пробовал разные, но все одно и то же:
74807094a5b34cb0b69acd8f2a240379.png26ff3915ffda4539a7041375292a9759.pnga7ebe6208eda4ef897dad455057a50c5.png
  • Вопрос задан
  • 2859 просмотров
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
Если камера прицеплена к подвижному объекту(на котором весь этот скрипт движения), то могу предположить что беда вот в этой строчке (хотя еще может быть беда с иерархией и другими скриптами)

speed = -5f - Time.timeSinceLevelLoad * 0.07f; //скоротсь

Time.timeSinceLevelLoad - может меняться не равномерно, на каждый кадр и тд. и вообще у вас скорость постоянно растет, если так и надо то заведите таймер свой, меняющийся на апдейте, плавно. попробуйте. так вроде из описания других причин не вижу.

timer+=Time.deltaTime;
speed = -5f - timer* 0.07f; //скоротсь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы