• Как исправить деформацию спрайтов в Unity при изменении разрешения экрана?

    @pashara
    Происходит это из-за скейла растра.
    Первый вопрос: на сколько это критично, если в приближении x6 это чуть-чуть деформированные маленькие точки. Думаю, что на большом разрешении это будет совсем не заметно.
    Если это всё-же нужно править, то делать это нужно:
    • при помощи тайлинга текстуры, а не ее растяжения
    • пытаться сделать так, чтобы скейл текстуры в экранных координатах был n:1, где n - целое число (т.е. чтобы тексутра на сцене по факту занимала 64n*64n пикселей), либо n = 2x, где x - целое число. (идея в том, чтобы скейлить вверх или вниз кратно двум)
    Ответ написан
    7 комментариев
  • Как исправить неплотное соприкосновение колайдеров в Unity?

    @K1ald
    Я бы просто сделал коллайдеры чуууточку меньше чем размер спрайтов.
    Мне кажется у спрайтов есть "невидимое пространство" которое и создает щель.
    Решение: Либо правильней настроить спрайты, либо поиграться с размерами коллайдеров.
    Ответ написан
    Комментировать
  • Как записать движения персонажа в unity2D?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Самый наивный вариант это сделать очередь из Transform и записывать каждое изменение позиции игрока в эту очередь. Потом когда нужно воспроизводить действие извлекаем элементы и передаем в вашу функцию движения. Данный вариант брошен навскидку и имеет ряд недостатков, один из них потребляемая память на хранения всех позиций. Улучшить его можно тем что мы будем сохранять ключевые позиции игрока, а промежуточные данные генерировать исходя от того откуда идем , куда идем и каким образом. Пример ключевых позиций : персонаж начал идти , потом перешел на бег, закончил бег, начало прыжка, пиковая позиция прыжка, приземление.

    Transform player;
    Queue<Transform> positions;
    
    private void Start()
    {
         player = GetComponent<Transform>();
         positions = new Queue<Transform>();
    }
    
    private void Update()
    {
        Move()
    }
    
    private void Move()
    {
         // move
        positions.Enqueue(player.transform);
    }
    Ответ написан
    4 комментария