저는 게으름쟁이고 귀차니즘 대왕입니다
그래서 최대한 단순하게 찍어낼수 있게 만들자 를 컨셉으로 AI를 만들었습니다
그리고 외국 사이트에서 에셋을 산뒤 바로 찍어내서 프로토타이핑이 가능하도록 만드는게 궁극적 목표였습니다
일단 예제가 될 외국 스토어에서 산 skel mesh와 animset
그리고 간단한 AI 상태 정의 , 저기서 AI마다 약간씩 다른 파라미터를 가지게 됩니다.(Hover가 빠진다거나 take damage가 안되는 state가 있다거나)
Follow는 NaviMesh를 이용하고 Direct Follow는 일직선상에 있어 NaviMesh가 필요없는 경우의 이동 상태 입니다
그리고 Hover는
http://www.youtube.com/watch?v=iMBhjXs2W2I
이런식으로 주위 회전인데 방향, 스피드, 타겟과의 거리(반지름) ,다음 이동 위치의 이동 가능 판정(navi mesh이용)
인데 이건 뭐 다굴 안당하게 하려고 만든거라..
핵심은 Attack pattern인데
이런식으로 무기 위치에 소켓을 박아 놓고 Anim에 Attack Start와 Attack End에 notify를 걸어 Controller에 통지하도록 만든뒤에
통지를 받은 Controller가 Pawn의 Socket위치를 Trace해서 target을 찾아낸뒤에 타격 판정을 하도록 만들었습니다
그럼 이 anim이 실행될때 Anim의 속도,종류에 따라 타격 판정이 바뀌는 animation 주도적 판정 시스템이 된거 같긴한데..
(anim 속도가 엄청 빨라져 tick과 tick 사이의 위치 변화가 크면 그 사이의 판정이 안들어가는 오류가 있긴 한데
그정도로 빠른 공격은 욕먹을거 같아서 안넣을꺼니까..)
이런 trace 판정 말고도 단순 스킬 공격도 notify형식으로 구현했습니다. 그리고 이렇게 구현한 anim들을
AI의 패턴에 의해서 실행하기 위해
이렇게 만들었습니다
여러가지 공격타입들을 만들고 , Melee Attack, Strike Attack, JumpAttack 등등등
Pattern List에서 시퀸스 대로 처리 되도록 했습니다( 랜덤하게도 처리가능합니다)
그리고 Pattern List에서 해당 Attack State가 실행되면
해당 Attack state는 해당 Anim을 실행시키고 위의 anim notify를 통해 controller에 통지하고 통지받은
controller는 state에 따라 타격판정을 하고..
뭐 요약하면 이런식이고 내부 코드는 여러가지 규칙(down이나 defense)가 들어가서 좀 더 복잡하긴 합니다;
디자이너가 할 일은 무기 위치에 소켓박고, Animation 모션마다 적절하게 Notify 넣어주고
기획자는 해당 AI 아키타입(위의 윈도우창 프로퍼티)에 해당 공격타입에 재생될 Anim Name, damage, attack range 뭐 등등등
만 넣으면 새로운 몬스터가 딱! 하고 나오는 내가 할 거 없는 시스템
이라고 생각했는데 난중에 생각해보니 전 혼자라 제가 다 해야되더군요..
디자이너, 기획자가 할일을 제가 다 해야되서 귀찮은거 빼면 괜찮은거 같긴 한데 또 고수님들 봤을땐
개선점이나 문제점이 있을거 같아서 올려봅니다
개선점이나 문제점 지적좀 해주세요~
많이 배우고 감니다
잘보고갑니다
네 ppt에 오타가 있네요 ㅋ navimesh는 navigation mesh Navmesh라고 하는군요
오 신박하다
음 down은 버티다가 넘어져있는 상태라고 생각하면 될것 같습니다
attack pattern에선 설명을 생략해도 될것 같았는데 이부분도 설명을 해야겠네요 각 AI는 DefensePoint를 가지고 있고 피격당할때마다 이 포인트가 감소되고 0이되면 down상태가 됩니다. 이때 아무런 동작도 못하고 일정 시간이 지나면 Down상태에서 기존 전투FSM으로 돌아오고 이때 DefensePoint가 모두 충전됩니다
제가 봐도 PPT쪽은 부실하네요 ^_^ idle상태에서 follow 상태는 적의 시야에 플레이어가 확보 되어 있을 경우고
hover는 시계방향,시계반대방향 두가지 동작을 랜덤하게 하는데 양 뱡향 모두 못가는 경우에 바로 Direct follow로 넘어가게 됩니다
네 일정시간동안만 맴돌도록 구현되어 있습니다.
문서화쪽은 생각지도 못한 부분인데 지적해주셔서 감사합니다 ㅎ
어휘선택도 통일성 있게 해야겠네요 사실 지금도 코드 안보면 조금 해깔리는 부분 있습니다;
그렇군요 문서와 코딩의 동기화라..흠 저게 PPT로 작성된거라 버전관리가 좀 힘들거 같은데 추천하시는 문서 툴 있으신가요?
변화 균형 통일!
많이 들어본 말인데 ㅋ 실천이 안되네요
후아 ㅋ 코세님 덕분에 다음 마일스톤이 정해진거 같습니다 코드의 문서화! 좀 쉽게 할 수 있는 방법도 알아보고.. 문서화하면서 개똥같이 짠 코드도 좀 손보고..
제가 게으름의 화신이라 하하하.. 일 같은건 확실하게 문서화 하고 하는데 꼭 제 프로젝트에 대해선 무한정 관대한거 같네요 ㅠㅠ
딱히 말할거 없다고 생각 생각햇는데 이름 같은거로 지적하는거 보고 나도 하나 던저보면, AI의 상태랑 입력이랑 분리되있지 않은상태 맞음? 그럼 확장성이 없잖아, 몬스터 변신 플레이가 만들고싶다. 라면 어떻게할거? 다뜯어고처야되니..불가능하잖아 네트워크는? 그런데 상태랑 입력이 분리 되있으면, 유저입력(키보드,마우스) or AI가 발생하는 메시지 or 네트워크에 의해 전달된 메시지로 입력모듈만 바꿔주면 굿
ㅇ//음 몬스터 변신 플레이가 뭔지 잘 몰라서..
ㅇ//플레이어가 몬스터로 변신해서 싸우는거면 아에 고려를 하지 않았습니다. 플레이어의 콤보 시스템에 들어간 Anim들이 몬스터를 통해서도 실행될때 몬스터마다 Anim의 수가 기하급수적으로 늘어나는점. 몬스터가 그냥 몬스터가 가진 anim만큼 공격을 한다면 과연 플레이어의 기존 콤보 시스템보다 재미 있을가 하는 문제 때문에..
codesafer// 네 interrput들도 takedamage 함수에 의해 실행 될때 state가 변경되는건데 이부분도 좀 설명이 부족했네요
ㅇㅇ 그럴거같아서 말안함, 근데 기본적으로 언제나 확장할 가능성을 열어두고 만들어야됨
codesafer// 방어는 특정 네임드 몬스터만 가지고 있는데 피격시에 hurt anim을 실행 안하고(즉 공격 anim이 중지되지 않습니다) 플레이어의 스킬중에 방어 상태를 풀 수 있는 몇가지 스킬들이 있습니다
ㅇ// 네 언제나 확장가능하게.. 좋은 말씀 감사합니다
열심히 만들었고 수상경력도 있고 문서정리도 열심히하셨으니 책한번 내보면 좋을듯, UDK 책은 거지같은 것들 밖에 없던데
제가 아직 책쓸 렙은 아니고... 포럼이나 UDN에 실력자가 많아요^^;
codesafer// 헤비 스탠딩이 마비노기의 그 개념이면 비슷하게는 구현되어 있습니다. 다만 케릭터 역경직 같은건 쓸만한 anim이 없어서 그냥 배제 했군요
codesafer// 네 좀 더 고민을 해봐야겠네요
아 그리고
http://gall.dcinside.com/board/view/?id=programming&no=358207&page=1&search_pos=-352253&s_type=search_name&s_keyword=ruthless
이부분에 대해선 어떻게 생각하세요?
단순 규칙만 이용해서 무리 전투를 구현 [일정 시간 Hover]-> (AI 와 target사이에 다른 AI가 없으면)->[공격] 있으면 다시 Hover] 이 규칙만으로 저렇게 구현이 되던데 이게 실무에서 쓰일만한 방법인가요?
아 몹 플레이 레코딩! 이거 log에 text 찍는걸론 대충 만들어놨었는데.. 이동에 대해선 아에 생각 안하고 있었습니다 ㅎ
음 그럼 저 규칙말고 뭔가 쓸만한 규칙 없을까요? 맴도는것도 계속보면 똑같은 AI같다(정답!) 라는 느낌이 든다고 해서.. Attack pattern에서 다르게만 만들면 된다고 생각했는데..ㅜㅜ
음 몬스터는 원거리 류가 좀 많긴한데 플레이어는 원거리 공격이 없어서.. 대신할께 몇개 있긴한데 ㅋ 상성쪽은 1:다수에 RPG라서 플레이어가 쪼렙한텐 어느정도 강한 느낌인데 영상에서는 만들어진 상성도 씹어먹는 느낌이네요 ㅎㅎ
훔..스마트폰게임이니까 어쩔수없다고생각하는대..
상성 관계는 디팬스와 스킬 사용에 따라서 어느정도 정립을 해놓긴 했는데 [스킬 사용 도중 캔슬이라던가] [특정 스킬만 디팬스 상태를 깬다던가] [몬스터 다운 상태에서만 사용가능한 스킬] [디팬스 상태일때 피격모션이 재생되지 않는 해비스탠딩] 등등등..
아 스마트폰은 이렇게 복잡하게 만드는게 아니다. 라는 소리도 한번 들었어요 ㅠ
스마트폰 게임
그건 카톡겜이 대세니까 그냥 하는 소리인거라고 생각되는데.. 스마트폰 게임은 단순해야한다는건 그다지 의미있는 울림은 아닌듯
에,애 한글로 적으면 꼭 반대로 적게 되더라구요 ㅋ
내생각은 스마트폰게임이 무조건단순할필요는없지만 다크에번져정도가 적당하지.. 일단 화면이작고 조작버튼이 한계가있으니.. 어쌔신크리드같은 방식이떠올라도 막상구현환경이안되고..
컨트롤의 복잡도도 문제가 됬었는데 이부분은 10월쯤에 전투시스템만 따로 뺀 무한모드 데모같은거 앱스토어에 올려놓고 이야기를 좀해야겠네요. 말만 가지곤 어떤 시스템인지 잘 설명이 안되서
codesafer// 네 언제나 많은 도움 주셔서 감사합니다
으르렁으르렁// 다크어벤저도 좀 단순한 느김이였는데 음.. 구현 환경의 문제도 공감이 가네요 4s가 좋긴한데 저거 돌리면 아슬아슬하게 30프레임 잡아주고 있어서
오밤중에 키배벌어진줄알았네
대다나다 ruthless 존경스럽당