• [Unreal 게시판] action과 state의 처리 방법 논란2014.09.30 PM 01:39

게시물 주소 FONT글자 작게하기 글자 키우기

Question>

원문 link:
http://cafe.naver.com/unrealenginekr/2181


유니티 메카님에 있는 Any State 형태를 구현하고 싶습니다.

캐릭터에 애니메이션이 많이 있는 상태에서
거의 모든 애니메이션 상태에서 피격 모션으로 넘어갈 수 있다면
일일이 모든 상태에서 피격 상태로 트랜지션을 만들어야 하나요?

아니면 유니티처럼 'Any State'로 쓸만한 방법이 있나요?

-------------------------------------------------------------

Answer>

찬찬(chan****)님 의견:
피격이나 공격같은 예측불가능한 입력에 대한 액션은
스테이트로 설계하는건 비효율적이라고 봅니다.

블루프린트 인터페이스에서 개별 입력에 대한 함수를 만드시고

게임로직에서 그냥 해당 입력 이벤트와
블루프린트 인터페이스의 함수를 연결하신뒤에...
애님블루프린트내에서 이벤트로 검색하시면
각 함수별로 블루프린트 인터페이스 이벤트가 있습니다.

이 이벤트를 원하는 몽타주(피격이나 공격애니메이션으로 만든)에 연결하시고
스테이트머신과 최종 아웃풋 애니메이션 사이에 슬롯을 추가하셔서 슬롯네임을 세팅하시면 됩니다.

https://docs.unrealengine.com/latest/KOR/Engine/Blueprints/UserGuide/Types/Interface/index.html

블루프린트 인터페이스를 쓰는 이유는 보통 입력 이벤트에 대한 처리는
게임로직에서 처리하지만 이벤트 발생시에 재생할 애니메이션 세팅은
애님블루프린트에서 하기 때문에 입력 이벤트가 발동하면 애님블루프린트에도 이벤트를 호출시키기 위해서입니다.

https://docs.unrealengine.com/latest/KOR/Engine/Animation/AnimMontage/index.html

복잡한 연속공격에 대한 튜토리얼이지만 피격모션을 구현하시는데 도움이 될듯 합니다.



제 의견(뽀까뽀까 의견):
흠.. '찬찬'님께서는 다소 animator의 관점에서 답변을 하신 거 같습니다.^^;;;;

만약에 character A와 B가 있는데,
A가 공격을 하는 중간에 B에게 공격을 당해서,
A의 공격을 취소하고, A를 피격상태로 전환해야 하는 경우..^^;;;;

1>이와 관련된 server에서의 관리와
network player간의 동기화는 어떻게 처리하실 건가요?

2>이에 대해서 state 전환 없이 animation만 바뀌었기 때문에,
player controller나 AI controller가 state를 오해해서 발생하는 bug는 어떻게 하실 건가요?
( 'Dark Soul'의 용두석 bug play가 여기에 해당됩니다.^^;;;; )

위 문제는 단순히 motion을 play한다 안한다의 문제만 있는 게 아니라,
state 전환에 대한 이력이 추적이 필요한 부분이기 때문에 각각의 state를 철저하게 따질 필요가 있습니다.
그렇게 안할 경우, 동기화에 문제가 생기거나, 악의적인 bug play가 가능해 집니다.

animation만 처리한다면,
찬찬님이 말씀하신대로 입력에 대한 action을 state로 처리하는 게 비효율적일 수도 있겠지만,
AI나 network에 대한 처리를 모두 세밀하게 해야 할 경우,
찬찬님이 답변하신 방법은 state와 action의 틈을 이용한 오류가 발생할 확률이 높습니다.

참고로 unreal engine으로 만든 game은 아니지만,
'Dark Soul'이라는 game이 있는데요.
이 game 1편에 motion cancel을 이용한 bug가 장난이 아니게 많았습니다.

대표적으로 소개하면,
google이나 naver 검색창에 '다크소울 용두석'이라고 치면 아주 대표적인 오류로 나옵니다.

http://www.youtube.com/watch?v=rbpWYhTEdUw
soul 무한으로 먹기.^^;;;;;;;;;;;;

http://www.youtube.com/watch?v=UjqZ-BjX3BQ
칼을 무제한으로 던지기.^^;;;;;;;;;;;;

http://www.youtube.com/watch?v=sJl62geP_zw
화염 폭풍 무제한 사용하기.^^;;;;;;;;;;;;

위 link말고도 관련 동영상 상당히 많고요.
물론, 지금은 모두 수정됐습니다.

만약에 찬찬님 말씀대로 비효율적이라는 이유로 action을 일일이
state로 설계하지 않는다면, 'Dark Soul'에서의 motion cancel bug를 피할 수 없게 된다고 보고요.

저 같은 경우, 'Dark Soul'의 motion cancel bug를 재현하지 않기 위해서라도..^^;;;;
사소한 action이라도 state를 일일이 만들어서 처리하고 있습니다.

'비효율적'이어도 '안전'을 위해서는 '미련한 방법'도 괜찮다고 생각합니다.^^







Tag:
안기훈, Kee Hoon Ahn, 언리얼, Unreal, UDK, iPhone, iPad, app, 앱, iOS
댓글 : 0 개
친구글 비밀글 댓글 쓰기