Переверните 2D персонаж, используя обратную кинематику, в Unity

У меня есть сфальсифицированный 2D персонаж со Sprites And Bones в Unity, и я использую обратную кинематику для его анимации.

Но если я хочу перевернуть ось X, мой персонаж сходит с ума:

ИК листать

У меня есть скрипт, прикрепленный к "Каратеке", содержащий простой Flip() функция:

public void Flip(){
    facingRight = !facingRight;
    Vector3 karatekaScale = transform.localScale;
    karatekaScale.x *= -1;
    transform.localScale = karatekaScale;
}
  • "Каратека" - это просто контейнер для костей, спрайтов и ИК целей
  • "Skeleton" содержит сценарий "Скелет" от Sprite And Bones
  • "Правая кость ноги", "Правая кость голени" и т. Д. Имеют сценарии костей и ИК
  • "Правая нога", "Правая голень" и т. Д. - это спрайты
  • "ИК" содержит все цели ИК

У меня такой же эффект с другим IK-скриптом, Simple CCD, из Unite 2014 - 2D Best Practices In Unity, поэтому я могу просто сделать что-нибудь глупое.

Что я могу сделать, чтобы правильно перевернуть моего персонажа?

РЕДАКТИРОВАТЬ (для Марка):

Я получил его на работу, используя это:

public void Flip(){
    facingRight = !facingRight;
    /*
    Vector3 karatekaScale = transform.localScale;
    karatekaScale.x *= -1;
    transform.localScale = karatekaScale;
    */

    GameObject IK = GameObject.Find ("IK");
    GameObject skeleton = GameObject.Find ("Skeleton");

    Vector3 ikScale = IK.transform.localScale;
    ikScale.x *= -1;
    IK.transform.localScale = ikScale;

    if (facingRight) {
        skeleton.transform.localEulerAngles = new Vector3(skeleton.transform.localEulerAngles.x, 180.0f, skeleton.transform.localEulerAngles.z);
    } else {
        skeleton.transform.localEulerAngles = new Vector3(skeleton.transform.localEulerAngles.x, 0.0f, skeleton.transform.localEulerAngles.z);
    }
}

2 ответа

Решение

Хорошо, так как мы обсуждали в комментариях, просто подвести итог:
1) Вы не переворачиваете все и / или неправильно сбрасываете кости, поэтому анимация "разваливается" при переворачивании
2) можно сделать SpriteRenderer.flip[X/Y], но это должно быть сделано для каждого элемента спрайта
3) Скелетный скрипт имеет флажок "Режим редактирования". Когда это проверено, и один переворачивает символ, используя scale.x *= -1, видно, что все, кроме костей перевернуты

И последнее, но не менее важное: вопрос был обновлен с помощью фрагмента кода, который предоставляет "решение на уровне кода".

Спасибо, что поделились всеми деталями, Сирилл, а также я рад, что смог помочь.

Также возможно просто повернуть основание сборного дома (здесь Каратека) на 180° по оси Y.

2D-спрайт на самом деле представляет собой двухстороннюю 3D-сетку, поворот их на 180° по оси Y делает то же самое, что и отражение рендера, и если IK связаны с корнем объекта, они будут следовать за вращением, и все анимации будут работать .

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