Переверните 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 связаны с корнем объекта, они будут следовать за вращением, и все анимации будут работать .