Огромный всплеск производительности с EventSystem.Update () только на первом касании экрана на Android - PullRequest
0 голосов
/ 04 июня 2019

На моем 2D-платформере для Android у меня огромный всплеск производительности, когда я впервые касаюсь экрана. После этого происходит небольшая задержка, и игра идет гладко. Нет сообщений об ошибках.

Я уже пытался назначить графический raycaster только на определенные кнопки, которые немного помогли. Но небольшое отставание все еще присутствует. В профилировщике скачок производительности находится под сценариями и помечается как EventSystem.Update (). вот скриншот с

Unity Profiler

При нажатии кнопки я использую следующий код в качестве UI Manager:

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine.UI;
using UnityEngine;

public class UIManager : MonoBehaviour
{
    public GameObject menu;
    public GameObject options;
    public GameObject pause;
    public Animator animatorMain;
    public Animator animatorOptions;
    public Animator animatorPause;
    public bool hide;
    public bool show;

    public void UIDefaults()
    {
        menu = GameObject.Find("MainMenu");
        options = GameObject.Find("optionsMenu");
        pause = GameObject.Find("pauseMenu");

        animatorMain = menu.GetComponent<Animator>();
        animatorOptions = options.GetComponent<Animator>();
        animatorPause = pause.GetComponent<Animator>();

        hide = true;
        show = false;
    }

    /* --- EXIT APPLICATION --- */
    public void Exit()
    {
        Application.Quit();
    }
    /* --- EXIT APPLICATION --- */

    /* --- MAIN MENU --- */
    public void OpenMainMenu()
    {
        UIDefaults();
        animatorOptions.SetBool("OptionsBool", hide);
        StartCoroutine("WaitMainMenu");
    }

    // line 28. Coroutine
    IEnumerator WaitMainMenu()
    {
        // wait for Options menu animation to end.
        yield return new WaitForSeconds(1.15f); 

        SetMainMenuActive();
    }

    // line 35. function to Start the Main menu animation.
    void SetMainMenuActive()
    {
        menu.GetComponent<Canvas>().enabled = true;
        options.GetComponent<Canvas>().enabled = false;
        pause.GetComponent<Canvas>().enabled = false;

        animatorMain.SetBool("MainBool", show);
        animatorOptions.SetBool("StartOptions", show);
        animatorOptions.SetBool("OptionsBool", show);
    }
    /* --- MAIN MENU --- */


    /* --- OPTIONS MENU --- */
    public void OpenSettings()
    {
        UIDefaults();
        animatorMain.SetBool("MainBool", hide);
        StartCoroutine("WaitOptions");
    }

    // line 66. Coroutine
    IEnumerator WaitOptions()
    {
        // wait for Main menu animation to end.
        yield return new WaitForSeconds(1.15f); 

        SetOptionsActive();
    }

    // line 73. function to Start the Options menu animation. 
    void SetOptionsActive()
    {
        menu.GetComponent<Canvas>().enabled = false;
        options.GetComponent<Canvas>().enabled = true;
        pause.GetComponent<Canvas>().enabled = false;

        animatorOptions.SetBool("StartOptions", hide);
    }
    /* --- OPTIONS MENU --- */
}

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

1 Ответ

0 голосов
/ 04 июня 2019

Возможно, вы используете GameObject.Find() для получения ссылок на ваши элементы меню. GameObject.Find делает обратный вызов для двигателя и может вызвать снижение производительности и скачки в профилировщике.

Установите эти ссылки в инспекторе, а не находите их при срабатывании события касания. Надеюсь это поможет! :)

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