2016-10-10 17 views
2

Unity에 Sprites And Bones이있는 리가브 2D 캐릭터가 있습니다. 역기능을 사용하여 애니메이션을 만듭니다. 나는 X 축 뒤집기하려는 경우Unity에서 inverse kinematics를 사용하여 2D 문자 뒤집기

하지만, 내 캐릭터는 광포 이동 :

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

IK flipping

나는 간단한 Flip() 기능을 포함하는 '가라테 카 "첨부 된 스크립트가

  • "Karateka"는 뼈, 스프라이트 및 IK 대상의 컨테이너입니다.
  • "해골"cont 스프라이트 및 본즈의 스켈레톤 스크립트
  • "오른쪽 다리 뼈", "오른쪽 다리 뼈"등은 뼈와 IK 스크립트가 있습니다.
  • "오른쪽 다리", "오른쪽 다리"등은 스프라이트입니다. IK를 내가 Unite 2014 - 2D Best Practices In Unity에서 다른 IK 스크립트, 간단한 CCD와 동일한 효과를

을 대상으로 모든

  • 는 "IK는"포함, 그래서 나는 멍청한 짓을 바로 할 수 있습니다.

    캐릭터를 올바르게 뒤집으려면 어떻게해야합니까? (마크)

    편집 : 우리는 주석에서 설명하고있는 바와 같이, 그래서 그냥 정리해,

    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); 
        } 
    } 
    
  • +0

    Sprite Renderer의 flipX/flipY 대신이 코드를 코딩 할 이유가 있습니까? https://docs.unity3d.com/ScriptReference/SpriteRenderer.html 그걸로한다면 같은 일이 발생합니까? IK 및 폴 타겟 (모든 IK 및 뼈에 대해)을 재확인 했습니까? –

    +0

    나는 이해하지 못한다 : 나는 "karateka"'GameObject'에'SpriteRenderer' 컴포넌트를 가지고 있지 않습니다. 나는 각 다리에 3 개의 SpriteRenderer (총 12 개) + 몸통과 머리 부분에 대해 몇 가지 더 있습니다. 예를 들어, "오른쪽 다리", "오른쪽 다리"및 "오른발"각각에는 고유 한 'SpriteRenderer'가 있습니다. 하나를 뒤집 으면 로컬에서만 뒤집을 수 있습니다. 나는 elmpty Sprite Renderer를 맨 "karateka"객체에 추가하려고했습니다. 행운이 없었습니다. 나는'GetComponent () .flipX = true;도 시도했다. 모든 객체를 다시 검사 하겠지만, 한 방향으로 작업 중이므로 두 객체 모두에서 작동해야한다고 생각합니다. – Cyrille

    +0

    실제로 모든 것을 뒤집거나 뼈를 올바르게 재설정하지 않은 것처럼 보입니다.애니메이션이 내 눈에 너무 빠르지 만, 뼈가 제자리에 갇히고 같은 방향을 향하고 있습니다 (예 : 뒤집히지 않고 움직이지 않음 - 스프라이트의 원점은 0입니까?). 코드에서이 작업을 수행 할 때 Debug.Log를 사용하여 전체 트리의 모든 데이터를 덤프하여 "멈춤"상태를 확인할 수도 있습니다. 아무것도 없다면, 그것도 정보입니다. –

    답변

    2

    좋아요 :)
    1 당신이 돈을

    는 나는이 사용 일을 가지고 모든 것을 뒤집거나 뼈를 올바르게 재설정하지 마십시오. 그 이유는 반전시 애니메이션이 "떨어져 나옵니다"입니다.
    2) SpriteRenderer .flip [X/Y]를 수행 할 수 있지만이 작업은 모든 요소에서 수행해야합니다. 스프라이트
    3) 스켈레톤 스크립트에 "편집 모드" 확인란. 이 확인하고 하나가 scale.x *= -1를 사용하여 문자를 뒤집 때,

    그리고 마지막으로를 뒤집 뼈를 제외한 모든 것이 을 볼 수 있습니다, 문제는 문제로 "코드 레벨의 솔루션"을 제공하는 코드로 업데이트되었다 .

    Cyrille의 모든 세부 정보를 공유해 주셔서 감사합니다. 도움이 되었기 때문에 기쁩니다.