애니메이터에서 스파게티를 피하는 방법?


9

Unity에서 애니메이션으로 작업하고 있으며 지금까지 4 개만 만들었으며 애니메이션 창은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

문제는 내가 위로 올라가면 영웅이 계속 찾고 있기를 원한다는 것입니다. '중립 유휴'(또는 그가 시작한)로 이동하지는 않지만 4 개의 유휴 위치가 있고 각각이 위로, 아래로 전환 할 수 있음을 의미합니다 , 왼쪽 또는 오른쪽 그리고 그들은 각각의 추가 행동으로 기하 급수적으로갑니다 ...

내가 뭔가 잘못하고 있다고 느끼게합니다 ....

다른 행동 사이를 전환하는 더 좋은 방법이 있습니까?


나는 이것을 오랫동안 시도 해왔다. 슬프게도, 나의 결론은, 당신은 단지 할 수 없다는 것입니다. 애니메이터는 항상 스파게티 웹으로 변하며 우리는 그와 함께 살아야합니다. 이 비디오를 살펴보면 youtube.com/…에
Nevermind

답변:


9

BlendTrees에서 이러한 유형의 문제를 해결할 수 있습니다 (일반적으로 블렌드 트리에 의존하는 것이 현명한 아이디어입니다). 블렌드 트리는 (float) 매개 변수를 기반으로 포함 된 애니메이션 중 현재 활성화 될 애니메이션을 결정하는 다중 애니메이션 상태의 일종입니다 (또는 결과 애니메이션이 여러 애니메이션의 혼합 일 수 있음). 애니메이션이 블렌딩되지 않고 스왑 된 경우에도 스왑은 애니메이션 중반에 발생합니다 (예 : "종료"애니메이션이 35 % 인 경우 새 애니메이션은 35 % 앞으로 재생 됨). "외부"에서이 모든 것이 하나의 단순 / 단일 상태 인 것처럼 숨겨집니다.

예를 들어 8 개의 스프라이트 애니메이션이있는 블렌드 트리가 있습니다 (4 개의 주 방향과 4 개의 대각선 방향의 유휴). 이 블렌드 트리에는 "수평"과 "수직"의 두 매개 변수가 있습니다. 그리고이 두 매개 변수를 기반으로 블렌드 트리는 재생할 애니메이션을 결정합니다. "수평"매개 변수를 기반으로 블렌드 트리는 왼쪽 / 오른쪽 애니메이션 중에서 선택하고 "수직"매개 변수는 위 / 아래 애니메이션을 결정합니다. 그런 다음 결합하면 대각선이있는 8 개의 애니메이션이 모두 나타납니다 (조이패드 / 조이스틱 뒤에있는 동일한 아이디어입니다).

여기에 이미지 설명을 입력하십시오

약간 혼동되기 때문에 StackExchange가 링크를 좋아하지 않더라도 짧은 예제 비디오를 링크 하겠습니다. 화면의 오른쪽 상단을 확인하십시오. 회색 점은 "상태"/ 애니메이션이며 활성 점은 빨간색 점에 가까운 것입니다. 처음에 말했듯이, 각 애니메이션은 빨간 점까지의 거리를 기반으로 영향 / 강도를 갖는 것이 훨씬 복잡하고 여러 애니메이션 사이의 혼합을 초래할 수 있습니다.

외부에서 단 하나의 상태 (블렌드 트리)와 같은 개념의 도보 및 공격을 적용하면 3 개의 상태 만 연결됩니다.

블렌드 트리는 빈 애니메이터 영역 Create State-> From New Blend Tree를 마우스 오른쪽 버튼으로 클릭하여 생성됩니다. 거기에서 모든 것이 인스펙터에 있습니다. 블렌드 트리를 선택한 상태에서 블렌드 트리의 유형 (1D, 2D 등)을 선택하고 애니메이션을 추가하고 위치를 지정하고 (매개 변수 값에 상대적으로) 제어 매개 변수를 선택할 수 있습니다.

Blend Trees에 대한 자세한 정보는 Unity- Unite 2016Unity Tutorials의 비디오 입니다.


2

여기서 문제는 트리거를 사용하여 유휴 상태를 전환하는 대신 모든 것을 하나로 묶으려고한다는 것입니다. if-else 또는 switch-case 유형의 조건을 사용하여 유휴 애니메이션을 선택해야합니다. 나는 훨씬 깔끔하게 보이는 다이어그램을 만들었습니다 (그중 하나가 기본 사례라고 가정).

여기에 이미지 설명을 입력하십시오

추가 정보:

한 번 봐 가지고 애니메이션 매개 변수 에 어떻게 인식 할 수있는 애니메이터를위한 설정 매개 변수 상태 시스템을 함께 애니메이션을 결합하는 상태 머신 동작을 변수 당신이 한 세트를 확인하는 방법은.


안녕 존,하지만 실제로 어떻게합니까? 왜 트리거를 사용하여 유휴 상태를 유지하거나 유휴 상태를 전환합니까? 다른 경우를 사용하여 유휴 애니메이션을 어떻게 선택합니까? 또한 다이어그램에서 왜 내가 idleleft로 이동 한 다음 왼쪽으로 이동하지 않고 다음 동작을 기다리는 idleleft로 이동합니까? 그렇지 않으면 반대 방향이어야합니까?
Matas Vaitkevicius

@MatasVaitkevicius 애니메이션 종료 또는 시작시 변수를 설정하고 확인할 수 있습니다. 케이스를 확인한 다음 아무 것도하지 않는 빈 애니메이션을 만들어 다음 부분으로 리디렉션하거나 추상화 레이어를 만들 수 있습니다. 자세한 내용을 보려면 매뉴얼에 대한 몇 가지 링크를 포함 시켰습니다.
John Hamilton

그렇다면 전환을 전환하는 매개 변수를 사용하면 어떻게해야합니까? 질문에서 한 것처럼 수동으로 전환하는 모든 메커니즘의 예는 없습니다 ..
Matas Vaitkevicius

@MatasVaitkevicius 당신은 정말 처음 비트를 검색해야합니다 gamedev.stackexchange.com/questions/103611/...
존 해밀턴

그러나 이것이 내가 한 일입니다. 작동시 화재가 발생하고 애니메이션이 시작된 다음 해당 방향으로 유휴 상태가됩니다. 이제 애니메이션을 그 방향으로 유휴 상태로 전환하는 대신 애니메이션 이후에 수행 할 수있는 말은 스위치 메커니즘으로 이동합니다. 나를 위해 적절한 유휴를 선택하지만 ... 나는 그런 메커니즘을 보지 못했습니다, 당신은 당신의 대답에 복사 할 수 있습니까 ....
Matas Vaitkevicius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.