У меня есть сфальсифицированный 2D-персонаж с Sprites And Bones в Unity, и я использую инверсную кинематику для его анимации.
Но если я хочу перевернуть ось X, мой персонаж сойдет с ума:
У меня есть скрипт, прикрепленный к "Karateka", содержащий простую функцию Flip()
:
public void Flip(){
facingRight = !facingRight;
Vector3 karatekaScale = transform.localScale;
karatekaScale.x *= -1;
transform.localScale = karatekaScale;
}
- «Каратека» — это просто контейнер для костей, спрайтов и ИК-мишеней.
- «Скелет» содержит сценарий Skeleton из Sprite And Bones.
- «Кость правой ноги», «Кость правой голени» и т. Д. Имеют кость и IK-скрипты.
- "Правая нога", "Правая голень" и т.д. - это спрайты
- "IK" содержит все цели IK
У меня такой же эффект с другим скриптом 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);
}
}
SpriteRenderer
компонента на моей каратисткеGameObject
. У меня по 3SpriteRenderer
на каждую конечность (всего 12) + еще несколько на части туловища и головы. Например, каждая правая нога, правая голень и правая ступня имеют свои собственныеSpriteRenderer
. Если я переверну один, он будет перевернут только локально. Я попытался добавить elmpty Sprite Renderer к верхнему объекту karateka, но безуспешно. Я тоже пробовалGetComponent<SpriteRenderer> ().flipX = true;
. Я еще раз проверю все свои объекты, но, поскольку он работает в одном направлении, я думаю, он должен работать в обоих. - person Cyrille   schedule 10.10.2016scale.x *= -1
, я вижу, что все, кроме костей, перевернуто. Так что только спрайты и цели ИК. Теперь в моей функции Flip() я переворачиваю только верхний IK GameObject, и это намного лучше, за исключением того, что мои спрайты, конечно, все еще в неправильном направлении. Я заметил кнопкуFlip()
в инспекторе игровых объектов Sprites And Bones, которая переворачивает все спрайты. Я все еще не могу запустить его из кода. В худшем случае я зациклюсь на всех SpriteRenderer. - person Cyrille   schedule 10.10.2016