У меня есть игра, над которой я работаю. Прошлой ночью я собрал его и загрузил в Google Play. Затем я взял свой телефон Android, пошел в магазин Play, чтобы загрузить мою игру, и когда она запускается, она работает ужасно. Игра движется невероятно быстро и медленно, как будто я установил скорость камеры на безумно высокое число. Это абсолютно неиграбельно. Это будет главное меню игры без элементов пользовательского интерфейса: https://youtu.be/Hxih--U8q9g
Небольшой фон на сцене:
Все эти здания и реквизиты создаются во время выполнения в функции Обновления по мере прохождения игроком уровня, но они также уничтожаются, когда игрок проходит их. Все они являются сборными, и все они используют свои собственные индивидуальные материалы с индивидуальными текстурами. Фактический уровень игры, в который игрок будет играть, точно такой же, как и в главном меню, только в нем есть игрок. Мои вопросы: может ли это быть только из-за плохой оптимизации для мобильных устройств?
Я уже установил самые низкие настройки качества в Unity, а также уменьшил размеры всех текстур с разрешения 4K до 128x128 - 512x512 (в зависимости от ресурса). Даже с такой оптимизацией игра работает так же плохо, как и раньше.
Я собираюсь изменить способ создания объектов и использовать вместо этого пул объектов. Я также буду использовать текстурный атлас вместо всех этих различных текстур и материалов.
Это способ, которым я сейчас создаю префабы:
void Update()
{
if (player.transform.position.z >= spawn.transform.position.z)
{
center = transform.position;
for (int i = 0; i < Random.Range(obstacleDifficulty.x, obstacleDifficulty.y); i++)
{
StartCoroutine(Delay());
}
Vector3 newPos = transform.position;
newPos.z += moveSpawner;
transform.position = newPos;
}
}
public void SpawnObstacles()
{
Vector3 pos = center + new Vector3(Random.Range(-size.x / 2, size.x / 2), 0, Random.Range(-size.z / 2, size.z / 2));
int n = Random.Range(0, obstacles.Length);
GameObject theObstacle = obstacles[n];
Instantiate(theObstacle, pos, rotation);
}
IEnumerator Delay()
{
yield return new WaitForSeconds(0.05f);
SpawnObstacles();
}
Я хочу исправить эту проблему, чтобы игра шла идеально гладко. Интересно, будет ли достаточно того, что я описал выше, с помощью объединения и атласов, чтобы это исправить.
EDIT:
Это мой скрипт контроллера камеры:
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour
{
public GameObject player;
public float cameraHeight;
private Vector3 offset;
void Start ()
{
offset = transform.position - player.transform.position;
}
void LateUpdate ()
{
transform.position = player.transform.position + offset;
transform.position = new Vector3(0, cameraHeight, transform.position.z);
}
}
Я видел кое-что об использовании Time.deltaTime в официальных уроках Unity, но я подумал, что должен использовать это в движении моего игрока, и умножение значения скорости моего игрока на Time.deltaTime не дало мне желаемого результата. Это движение моего игрока:
rb.velocity = new Vector3 (xVelocity * Input.acceleration.x * 1.75f, 0,
скорость);
Прошлой ночью я также отключил все эффекты изображения на своей камере, и это убрало около 25 партий из моей сцены, я понятия не имел, что это будет так дорого. Я получил свою сцену примерно на 15 партий, как это было примерно 55-70 раньше, и мне еще предстоит протестировать ее на своем мобильном телефоне, чтобы увидеть, как она движется.