게임 플레이 액션을 특정 애니메이션 타이밍에 동기화하는 좋은 기술은 무엇입니까?


10

그래서 나는 작업중 인 게임에서 문제를 겪었지만 많은 게임에서 발생할 수있는 매우 근본적인 것 같습니다.

내 게임에서는 캐릭터 애니메이션 중에 매우 특정한 시점에 일부 게임 플레이 기능이 필요합니다. 타이틀에서 알 수 있듯이 게임 플레이 관련 이벤트 / 기능 / 액션을 캐릭터 애니메이션의 특정 지점에 동기화하기위한 좋은 기술과 기본 전략이 무엇인지 궁금합니다.

다음은 다양한 유형의 게임에서 내가 말하는 것에 대한 간단한 예입니다.

  • 당신의 캐릭터 는 사수에게 총을 다시 장전합니다 . 캐릭터는 자신의 '재 장전'애니메이션을 재생하지만, currentAmmo 변수를 설정하는 기능 은 매거진을 교체하고 총을 콕킹 한 후 정확한 순간 에만 호출하는 것이 중요합니다 .다시로드 애니메이션 중간에있을 수 있습니다.

  • A의 턴 기반 RPG 캐릭터 원수의 라인을 직면 줄을 서있다. 공격하라는 명령을 받으면 캐릭터 중 하나가 적 중 한 명에게 달려 가고 점프하고 거대한 검을 휘두르고 서서 다시 점프합니다. 당신은 확실히 있는지 확인하려는 원수가 파괴력 애니메이션이 그 정확한 순간에 손상 까지 실행하고 다시 실행 사이의 어느 시점 - 재생됩니다.

  • A의 스텔스 게임 , 캐릭터가 몰래 수 있고, 세계에서 컴퓨터와 버튼과 상호 작용합니다. 침투하는 전초 기지의 불빛에 대한 전원 공급 장치를 끄는 버튼이있을 수 있습니다. 액션 버튼을 누르면 캐릭터가 손을 뻗어 버튼을 누른 다음 유휴 자세로 돌아갑니다. 버튼을 누르면 'push_button'애니메이션의 정확한 지점에서 조명이 꺼 지길 원합니다.

분명히, 나의 특별한 경우는 공격하는 동안 내 턴 기반 캐릭터가 앞으로 나가는 애니메이션을 만들었고 애니메이션이 접촉하는 것처럼 보이는 순간에 손상이 적용 되기를 원하는 애니메이션을 만들었습니다. . 턴 기반 시스템을 사용하는 게임 (Final Fantasy 또는 Fire Emblem과 같은 상상)으로 인해 손상 / 치유 / 매직 등이 필요합니다. 실제로 충돌 / 히트 박스를 사용하지 않더라도 각 캐릭터 애니메이션 중에 올바른 시간에 적용됩니다.

나는 인기있는 게임 엔진에서 게임을 만들고 있으며, 지금은 애니메이션 이벤트 를 사용하여 이것을 처리하고 있거나 원하는 결과에 가까운 것을 달성하도록 알립니다. 내 캐릭터는 특정 명령을 수행하고 트리거합니다. 명령 별 애니메이션 (예 : 'attack_command') 및 각 명령에 대한 애니메이션 자산에는 애니메이션 이벤트가 포함되어 있어야합니다. 내 문자에 '콜백'을 알리면 ExecuteCommand 기능이 있어야합니다. 즉 , 캐릭터가 공격 애니메이션을 재생하도록 지시 한 다음, 공격 애니메이션은 피해를 처리해야하는 애니메이션 도중 정확한 순간에 이벤트 / 알림 콜백을 캐릭터에 보냅니다.

솔직히 이것은 현재로서는 효과가 있지만 여기서 큰 그림의 일부를 놓친 것처럼 잘못 느낍니다 ! 이 방법이 잘못되었다고 느끼는 이유 중 하나는 게임 로직을 애니메이션 자산과 연결하기 때문입니다. 애니메이션 애셋에 ExecuteCommand () 이벤트 / 콜백 포함을 잊어 버린 경우 명령이 제대로 실행되지 않고 명령을 실행하지 않고 명령 애니메이션이 완료되었는지 확인하기 위해 추가 코드가 필요합니다. 지저분하고 내 게임 플레이가 자산에 이상한 의존성을 가지고 있음을 의미합니다. 물론 공격 애니메이션 중 특정 지점에서 손상이 발생하기를 원하지만 애니메이션 자산 내에서 게임 플레이 코드를 호출하는 것이 정말 이상합니다.

그래서 여기서 무엇을 간과합니까? 애니메이션 중 특정 시간에 특정 게임 플레이 동작이 발생하기를 원하는 이러한 유형의 상황을 처리하는 데 유용한 일반적인 기술은 무엇입니까?

편집 : 분명히하기 위해, 이것은 엔진 특정 질문이 아니며 엔진 특정 디자인 / 기술을 찾고 있지 않습니다. 사용 된 기술에 관계없이 게임 프로젝트에서 사용할 수있는 일반적인 애니메이션 / 게임 플레이 동기화 기술에 관심이 있습니다.


1
혼란 스러워요. 게임 플레이는 애니메이션 타이밍에 의존하고 싶지만 게임 플레이는 자산에 의존하지 않기를 원하며 애니메이션은 자산 유형입니다. 그러한 희망이 어떻게 호환 될 것으로 기대하십니까?
Anko

일부 게임 플레이 요소를 애니메이션과 동기화하고 싶습니다. 그러나 두 가지 간의 동기화가 항상 의존성을 의미하는 것은 아닙니다. 사람들이 애니메이션을 게임 플레이와 동기화하는 데 사용하는 기술에 관심이 있습니다. 나는 내가 시도한 것과 내가 이것을 달성하기 위해 현재하고있는 일을 말했다. 따라서 나의 질문은, 사용하거나 사용할 수있는 다른 / 더 나은 / 대안 기술 (애니메이션 이벤트 / 알림 / 콜백이 자산) 표준 방법? 이것이 프로젝트에서 사용하고 있습니까?
MrKatSwordfish

답변:


5

동기화를하려면 타이밍 권한을 가진 사람 (코드, 애니메이션 또는 둘 다)을 결정해야 합니다. 다른 사람이 "댄스"하는 "비트"입니다.

다른 배열은 다른 게임에 적합합니다.

  • 애니메이션은 타이밍 권한입니다 (현재 설정)

    게임 코드는 애니메이션을 트리거 할 수 있습니다. 애니메이션이 특정 지점에 도달하면 게임 코드가 반응 할 수있는 이벤트 (예 : 재 장전 완료)가 발생합니다 (예 : 사용 가능한 탄약 재설정).

    애니메이션의 정확한 타이밍 (게임 상태와 상관없이)이 게임의 중요한 부분이거나 애니메이터가 타이밍을 제어하도록하려면이 방법을 고려하십시오.

    애니메이션 도구 Blender (3D) 및 Spine (2D)을 통해 애니메이터는 게임 코드가 구독 할 수있는 이벤트를 정의 할 수 있습니다.

  • 코드는 타이밍 권한입니다

    위와 반대 : 게임 세계에서 발생하는 이벤트 (예 : 플레이어가 무기 재 장전을 선택)로 인해 애니메이션이 실행되고 매개 변수가 전달됩니다 (예 : 재 장전이 완료 될 때까지의 시간). 각 애니메이션은 제공된 매개 변수를 사용하여 모양을 수정합니다 (예 : 지정된 부분에 "다시로드 된 부품"이 발생하도록 적절한 속도로 애니메이션을 실행).

    애니메이션은 게임 이벤트 (예 : 플레이어가 다시로드를 취소하거나 플레이어가 다시로드하는 동안 플레이어 웅크림)를 수신하고 그에 따라 모양을 수정할 수도 있습니다.

    애니메이션이 타이밍에 대해 융통성을 가질 수 있거나 게임에서 절차 적으로 생성 된 컨텐츠에 크게 의존하거나 프로그래머가 타이밍을 제어하도록하려면이 방법을 고려하십시오.

    Overgrowth 의 캐릭터 애니메이션은 크게 이런 식으로 구성됩니다. David Rosen은 그의 GDC 14 강연에서이를 설명합니다 (특히 이동 이동 계속 세그먼트 참조).

  • 암시 적 타이밍 (외부 권한)

    리듬 게임 또는 타이밍이 외부 소스 (리듬 게임, 음악 트랙의 비트)를 통해 제어되는 기타 상황에서는 이러한 것들을 모델링하는 것이 합리적 일 수 있습니다. 게임 코드와 애니메이션은 글로벌 타임 스탬프와 게임 상태를 모두 읽은 다음 통신하지 않고 적절하게 동작 할 수 있습니다.

    게임 상태와 애니메이션이 외부 타이밍 기관에 크게 의존하는 경우이 방법을 고려하십시오.

물론 게임의 다른 시스템에 다른 접근 방식을 사용하고 싶을 수도 있습니다. 예를 들어 리듬 게임은 종종 노래의 비트를 외부 기관으로 사용하지만 애니메이션은 여전히 ​​플레이어 인터랙션 이벤트를 수신하여 보류 된 음표의 모양을 취소하거나 변경합니다.


0

추가 추상화 계층으로 거의 모든 계산 문제를 해결할 수 있다고 어딘가를 읽었으며 귀하의 사례가 다른 것을 보지 못했습니다.

이 요구 사항에서 나는 일반적으로 캐릭터의 상태를 제어하는 ​​레이어를 봅니다. 이런 식으로 캐릭터는 현재 애니메이션과 현재 상태를 갖게됩니다. 각자의 책임이 있습니다.

애니메이션은 비주얼에만 책임이 있으며 상태는 해당 액션에 대한 게임 특정 로직을 처리합니다.

전투 게임에서 상태는 BaseState 클래스에서 상속되고 Update () 메서드가있는 객체입니다. 각 문자에는 상태 모음이 있지만 한 번에 하나만 할당 할 수 있습니다. 그리고 현재 상태의 Update () 메서드는 프레임 당 한 번 호출됩니다.

그것은 모든 논리를 수행하는 상태의 Update () 안에 있습니다. 특정 프레임에서 문자의 속도를 설정하고 건강을 증감시킵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.