Как исправить высокую скорость и отставание в сборке Android - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть игра, над которой я работаю. Прошлой ночью я собрал его и загрузил в 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 раньше, и мне еще предстоит протестировать ее на своем мобильном телефоне, чтобы увидеть, как она движется.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Вам нужно проверить свой профилировщик, тогда вы увидите, есть ли необходимость оптимизировать игру или нет, и проверить наличие пакетов. И использование Time.deltatime похоже на то, что вы хотите сделать свою игру независимой от типа устройства, поэтому даже на медленном устройстве вы получите скорость 10 (допустим, вы установили скорость 10) и на более быстром высоком устройстве вы все равно получите скорость 10. Если вы не будете использовать Time.deltatime, вы будете получать большее количество кадров в высокопроизводительных устройствах, и скорость будет настолько высокой, потому что вы будете перемещать свой плеер очень быстро из-за высокая частота кадров и медленное движение в младшем устройстве.

0 голосов
/ 01 мая 2019

Я только что сделал тестовую сцену. Это то же самое, что и реальный игровой уровень, но в этом я отключил все, что было создано, вместо этого я просто сделал небольшую часть уровня, вручную разместив префабы. Я также поместил точно такой же материал на все мои объекты, стандартный синий материал. Так что нет никаких объектов, порождаемых во время выполнения, и нет текстур, и моя сборка все еще работает медленно на моем устройстве Android. Он не такой медленный, как раньше, его можно играть с тех пор, как я отключил эффекты постобработки (кроме тумана), но игра все еще не работает гладко.

Что еще я могу сделать, чтобы он работал гладко?

Это мой профилировщик, когда я играю в игру на том же Android-устройстве, но в Редакторе, используя Unity Remote. Скриншот профилировщика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...