Проблема при переворачивании 2D-спрайта в Unity

У меня есть 2D-персонаж, который может двигаться влево и вправо и прыгать. исходный спрайт персонажа расположен слева направо (голова в правильном направлении). когда персонаж движется назад, он поворачивает спрайт влево, но когда это происходит, коллайдер Box (зеленый прямоугольник), отвечающий за столкновения, смещается относительно персонажа. Мне нужно, чтобы при переворачивании спрайта он оставался на том же месте, не выходя из коллайдера Box. Как это исправить? Примечание. Я использую свойство SpriteRenderer.flipX, чтобы перевернуть спрайт.

Нормальный спрайт

Перевернутый спрайт

(обратите внимание, что зеленый прямоугольник, коллайдер, немного смещен относительно спрайта)

Я уже пробовал умножить transform.localScale.x на -1, но это создало еще одну проблему.

Переместите ось в центр прямоугольной части тела. Центр, скорее всего, центрирован по всему спрайту, а не по центру прямоугольной части тела. Сравните, где находится центр бокс-коллайдера и точка поворота спрайта.

hijinxbassist 21.05.2024 23:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Я воспроизвел проблему в Годо, чтобы лучше понять, о чем я говорю.

  1. Спрайт визуально выравнивается по центру коллайдера:

  1. Но внезапно сдвинется, если я переверну его по горизонтали:

  1. Теперь посмотрите на реальные границы изображения — кот явно сдвинут вправо:

Вам придется либо изменить само изображение, либо попробовать настроить поворот, как уже упоминал @hijinxbassist в разделе комментариев. Второй вариант мне не подошел.

Ответ принят как подходящий

Чтобы решить эту проблему, вам нужно настроить точку поворота вашего спрайта. Точка поворота — это точка, вокруг которой спрайт вращается или переворачивается.

Вот как это сделать:

  1. Выберите свой спрайт на панели «Иерархия».
  2. В окне Инспектора найдите компонент Sprite Renderer.
  3. Нажмите кнопку «Редактор спрайтов» рядом с полем «Спрайт».
  4. В окне редактора спрайтов вы увидите белый круг, обозначающий точку поворота.
  5. Перетащите точку поворота в центр спрайта (или в точку, в которой спрайт должен перевернуться).
  6. Нажмите Применить, чтобы сохранить изменения.

Теперь, когда вы переворачиваете спрайт с помощью SpriteRenderer.flipX, спрайт должен переворачиваться вокруг точки поворота, а Box Collider должен оставаться на одной линии со спрайтом.

Кроме того, вы также можете настроить точку поворота программно, установив свойство SpriteRenderer.pivot. Однако использование редактора спрайтов — более наглядный и интуитивно понятный подход.

Что касается умножения transform.localScale.x на -1, то в данном случае это не рекомендуемый подход, поскольку это может вызвать другие проблемы с вращением и позиционированием вашего спрайта.

это сработало. На самом деле мой спрайт — это анимация, поэтому мне нужно переместить точку поворота для всех кадров. Есть ли более простой способ отредактировать опорную точку для всех изображений?

Marvin Marjan 27.05.2024 19:50

Другие вопросы по теме

Как мне создать проект Unity, если мне нужно использовать UnityEditor.Animations?
Как удалить файл .aab, который я загрузил в пакет Android Explorer и выпустил для внутреннего тестирования?
Android-приложение Unity аварийно завершает работу при установке из Google Play Store
Встроенная игра Unity не создается. Сообщение об ошибке: сжатие Brotli может не поддерживаться через HTTP-соединения
Репозиторий Unity Git ломается при клонировании
Почему мой снаряд движется в неправильном направлении?
Как я могу изменить этот блок кода для обнаружения столбцов, состоящих из 3 или более синих кубов (Unity)
Загрузка необработанных данных текстуры/получение данных из вычислительного шейдера
Unity зависает при открытии проекта на этапе «Загрузка сборок сценариев» или «Начальное обновление базы данных ресурсов»
UNITY В режиме прокрутки, как мне перетаскивать, когда я нажимаю на дочерние элементы?