• Как в юнити оптимально отображать часто меняющийся текст?

    @Ezekiel4
    Охотник на пиратов
    Проблема 100% в коде, которого нет, поэтому я вдамся в гипотезы. Начну с самого хардкорного и закончу тем, что по лайтовее.

    1. Авторазмер
    Возможно, у вас есть скрипт, который при каждом изменении текста пытается отмасштабировать не шрифт, а границы самой компоненты. Проблема в том, что при любом изменении элементов интерфейса юнити перерисовывает вообще весь затронутый канвас. Речь не о свойствах типа цвет, а о перемещении и изменении границ.
    Если у вас такая проблема, то стоит оставить текст в покое и изначально сделать задел по размеру текста на будущее.
    Сюда же можно отнести перерисовку других элементов для ScrollView или использование UI Layouts.

    2. GetComponent
    Возможно, вы используете GetComponent. И делаете это довольно часто. Что-то типа такого:
    public void SetupText(string textToDisplay) {
    	GetComponent<TextMeshPro>().text = textToDisplay;
    }

    Парни с ютуба часто советуют такой треш. Под капотом этот метод довольно тяжёлый и будет тем тяжелее, чем больше компонент на объекте и чем больше раз за единицу времени вызывается.
    Если это ваша проблема, то рекомендую заранее кешировать. Например, сделать это на старте:
    private void Start() {
    	someTextComponent = GetComponent<TextMeshPro>();
    }

    А ещё лучше просто создать видимое инспектором поле и руками туда передать ссылку.
    [SerializeField] TextMeshPro someTextComponent;

    3. Частота вызова
    Ещё один треш, которому учат в интернете - менять что-то или проверять не тогда, когда это нужно, а просто в том же Update. Проблема здесь кроется в множестве "холостых" вызовов.
    Если у вас обновление текста происходит всегда, а не только при необходимости, то стоит подумать лучше над архитектурой.

    4. Размер текста
    Особенность компонент пакета TMPro ещё в том, что метод SetText или аксессор .text не только просто берёт и вставляет, а ещё проводит довольно большую работу под капотом. Если у вас большой текст, вы реально увидите просадку даже на компе, не говоря уже о мобилках. Такая проблема очень актуальна. Например, если вы скриптом или твинами делаете постепенно появляющийся большой объём текста для диалога в игре.
    Решением в данном случае будет либо анимация, либо написание своей реализации нужной компоненты.

    Если среди проблем вашей нет, приложите код. Желательно весь, но в контексте задачи интересна цепочка вызовов от события к присвоению текста.

    PS. на будущее, FPS проекта в редакторе и FPS игры в билде не одно и то же. Сделайте простой счётчик FPS и посмотрите на ситуацию в игре.
    Ответ написан
    Комментировать
  • Почему я не могу привязать к врагу родителя?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Там же по-английски написано, нельзя переносить объект в префаб, это его сломает.
    Т.е. виноват не сам код, а то что ты его запускаешь на префабе.
    Ответ написан
    2 комментария
  • Ошибка с поворотом камеры в скрипте?

    @Ezekiel4
    Охотник на пиратов
    Занятный способ использовать агента. Обычно для движения используют Transform, Rigidbody, CharacterController или WheelCollider. Не видя проекта могу лишь сказать, что вы поместили камеру по иерархии внутрь игрока. И когда игрок поворачивается, камера поворачивается вместе с ним. Обычно для управления камерой пишут отдельный скрипт, что я вам и советую сделать.
    Ответ написан
    Комментировать