Свойство кэша (get) и отложенная инициализация для безопасного GetComponent до пробуждения в единстве (мобильные платформы) - PullRequest
0 голосов
/ 14 мая 2019
  • Мне нужно при запуске кэшировать большое количество компонентов (и я не могу напрямую ссылаться на них в монобихе)
  • Я не могу быть уверен, когда они будут запрошены (поэтому я не могу кешироватьих в Awake, потому что их можно было запросить у Awake другого монобиавора)

Моим исходным решением было использование общедоступного свойства get, с которым я больше знаком.Но сейчас я пытаюсь инициализировать Lazy (это более читабельно).

Получение компонентов как свойство

    // --------------- COMPONENT AS PROPERTY --------------- //
    private ComponentRequired _componentAsProperty;
    private ComponentRequired _ComponentAsProperty
    {
        get
        {
            if (_componentAsProperty == null) 
                _componentAsProperty = GetComponentInChildren<ComponentRequired>(true);
            return _componentAsProperty;
        }
    }

Получение компонента как Lazy

    // --------------- COMPONENT AS LAZY --------------- //
    private Lazy<ComponentRequired> _componentAsLazy 
                => new Lazy<ComponentRequired>(GetComponentInChildren<ComponentRequired>(true));

Я также прочитал Кэшированное свойство против Lazy (что было связано с созданием экземпляров), и тот же ответ может относиться к отложенному повторному просмотру компонентов.

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

1 Ответ

0 голосов
/ 05 июля 2019

Для Unity лучше избегать реализации Lazy, поскольку она может выходить из основного потока (и GetComponent не может использоваться вне основного потока).

В этой версии Unity 2019.1.7 гораздо безопаснее использовать свойства для кэширования любого компонента.

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