디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[📜일지] LeoECS를 이용한 Unity에서 ECS게임 만들기 (7)

소닉쫄따구테일즈갤로그로 이동합니다. 2023.04.01 21:53:11
조회 579 추천 9 댓글 4
														

LeoECS를 이용한 Unity에서 ECS게임 만들기 (1)

LeoECS를 이용한 Unity에서 ECS게임 만들기 (2)

LeoECS를 이용한 Unity에서 ECS게임 만들기 (3)

LeoECS를 이용한 Unity에서 ECS게임 만들기 (4)

LeoECS를 이용한 Unity에서 ECS게임 만들기 (5)
LeoECS를 이용한 Unity에서 ECS게임 만들기 (6)


Beatem Up의 액션 시스템과 몬스터 AI 설계



2ab2d207cc8076a167b9f68b12d21a1d6c8e54f0973986

던전앤드래곤 같은 빗엠업 게임을 보고 기능들을 분석해보았다.

만들고자 하는 게임을 설계하고자 하고, 어떻게 만들어야 할지 모른다면, 그 게임이 룰이나 어떤 단편적인 기능을 서술로 풀어서 쓰면, 그 안에서 실제 룰(시스템)을 유추하기가 용이하다고 한다. (객체지향방법론에서 디자인 단계랑 비슷?)


1.플레이어 캐릭터는 플레이어가 입력을 통해 행동을 컨트롤 한다.

2.몬스터 캐릭터는 AI가 행동을 컨트롤 한다.

3.캐릭터는 타격 받으면 경직한다

4.캐릭터는 세게 타격 받으면 에어본이 되기도 한다. (혹은 세게 맞지 않더라도 많이 맞으면 에어본 가능)

5.행동이란 음... 뭔가 하는걸 행동이라 한다! (퍽)
ㄴ행동은 스트리트파이터의 장풍, 어류겐, 점프 처럼 뭔가를 하는것을 행동이라고 함.

ㄴ코드로 말하자면 정해진 시간동안 발생하는 일련의 동작이라고 정의할 수 있다.

ㄴ중요한 것은 이 행동은, 서로 중복해서 실행할수 없다는 것이다. 예) 달리면서 걷는거, 제자리 포션 + 점프 등

6.행동에 타격효과가 있다면 상대 캐릭터에게 타격을 가하는 범위(히트박스)를 만들 수도 있다.


이를 통해 떠오르는 시스템들은 다음과 같다.


(빗엠업 시스템)

플레이어 컨트롤 시스템

몬스터 AI 시스템

행동 시스템

타격 시스템


21b8df23e6c16f993cf1c6bb11f11a39cc144bfda6735574

액션 시스템 게임은 반응성이 최우선이기 때문에, 시뮬레이션 결과는 최대한 빨리나오는게 좋다. 떄문에 Loop에서의 시스템 처리에서 순서가 매우 중요하다.
플레이어나 AI가 행동을 컨트롤 해야하므로 Loop에서 최상단에 위치하고 있고
그 다음 행동 시스템은 AI나 컨트롤러에서 받은 정보로 정해진 행동을 수행해야 하며
만약 행동 시스템에서 타격(히트박스)이 생성되었다면 타격 시스템에서 바로 처리해주어야 하므로 그 다음에 온다.

행동 시스템 (HardCodedActionSystem)

행동 시스템은 단순하다. FSM이고 다음과 같은 상태들이 있다

Idle,Angry,Beatup,MoveForward,TurnAround,SimpleAttack,JumpAttack

고블린의 이동, 대기, 오일던지기, 점프, 조롱하기, 뒤돌아서 보기, 빙글빙글 돌기 같은 것들 전부 행동이다.

Component에 nextState에 수행하고자 하는 행동 state이름을 넣어주면 동작한다


21b8df23e6c16f993ff1c6bb11f11a3970d4ffe2e6b92e53



플레이어 컨트롤, 몬스터 AI 시스템 (PlayerControlSystem,BTRuntimeSystem)


플레이어 컨트롤은 유저 Input에 따라 어떤 행동을 하게 하면 된다. 몬스터 AI는 Input이 아닌 프로그래머가 주어진 Logic에 따라 행동을 하면 되는 것.



21b8df23e6c11fa96c9efffb11d8221dfbcc7603d4e6925c8ce5bf8a

몬스터는 BehaviourTree로 작성하였지만, FSM으로 해도 무방하다. 몬스터 BT에서는 특정 로직에 따라 뭔가 하고자 하는 행동이 있다면 HardCodedActionComponent의 nextState에 세팅하면 해당 행동을 수행한다.



근데 여기서 플레이어 컨트롤은 좀 다르다.

플레이어 컨트롤몬스터 AI의 차이는 단지

Input을 유저가 주냐 or AI가 주냐 차이만 있는 것이 아니다.


플레이어 컨트롤에는 몬스터 AI에는 없는 행동 수행 중에 특정 행동을 못하는 제약이라는게 존재한다.


예1) 서있을땐, 공격A,B 점프, 방향키로 이동 다 가능

예2) 공격A중에는 공격B만 사용가능 나머진 다 못함
예3) 쓰러져 있을때는 다시 일어서기 전까지 아무것도 못함.


몬스터는 AI가 누워있을땐 알아서 공격 행동을 수행하지 않을테니 행동 시스템에 제약이 필요가 없는데

플레이어는 캐릭터가 누워 있을때도 방향레버랑 버튼들을 마구 누를 테니깐

누워있을때 점프 눌렀다고 바로 점프 행동을 하면 안되는 것이다.


때문에 플레이어 컨트롤 시스템은 행동 상태간 전이 조건이라는 것이 정의되어 있다. 대충 다음과 같이 생겼다.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea83fa11d0283194e703ddecc64e07c2355c5f703ef0b7c1e7cda0b4a256b51a1a0e89f8dc65f68c78509c310867499886ad235cdb4bc6fc17e85e

21b8df23e6c16f993af1c6bb11f11a39fa6acd883912b267fe

Stand중에 Move전이는 방향키 눌렀을때, Move에서 Stand전이는 방향키를 떼었을때

일반공격1 중에 특정 구간 프레임에 공격버튼을 누르면 일반공격2가 나가게끔

맞거나 쓰러져있는 상황인 Beatup상태에는 어떠한 상태전이도 발생안함


타격 시스템


행동 시스템 내에서 히트박스 객체를 생성하면, 히트박스내에 있는 객체들에게 일련의 "효과"를 가한다.

효과라는 것은 체력을 차감시키는 데미지 처리, 행동 시스템에서 "경직" 혹은 "에어본" 상태로 만들어 버리는 경직 효과 처리 등이 있다.

타격 시스템은 이런 효과를 받아야 한다고 대상 객체에 Tag를 해둘 뿐이며, 실제 이 처리는 EffectDataConversionSystem에서 처리한다.

(이전 일지에서 한번 설명한적 있음)



25b4c415fcc12ca363ee98b21fd70403da2b8ea17fcc100ec128


25b4c415fcc12ca363ed98b21fd7040377f59c476730fa5d7a2977


전이랑 달라진 게 있다면, 예전에는 바닥 xz평면으로만 히트를 검사했다면, 지금은 y축 검사도 한다는 점


25b4c424eaca2bbf7dabd3b858c12a3af02576ddf2e3256d6d8e2e



빗엠업 시스템


사실 플레이어 컨트롤 혹은 몬스터AI보다 더 최상단에 있는 시스템은 바로 빗엠업 시스템이다. 이 시스템은 현재 캐릭터가 "보통" 상태인지, 혹은 "경직", "에어본" 상태인지를 처리하는 시스템이다. 몬스터AI든 플레이어 컨트롤이든, 캐릭터가 경직,혹은 에어본 상태라면 모든 행동은 취소어야 하기 때문에 이 시스템이 우선적으로 먼저 처리된다. 때문에 몬스터 AI의 동작 최상단 조건에도 현재 빗엠업에서 행동해도 되는 상태인지를 확인하고 돌아가게 되어 있다.



2fb8d132e0df2db67da6c5a113dc6a2d962a7c98d3986c1a15cc5f0e90

빗엠업 게임은 기본적으로 상태가 무려 일반,경직,에어본,에어본경직,바닥,바닥경직,기상 총 8개가 있다...


그냥 쳐맞을 때 돌아가야 할 상태들이 저렇게 많은 것이다.


사실 빗엠업을 만들면서 행동이라는것을 정의하고 나니, 경직과 에어본 역시 행동이어서, 해당 행동 역시 행동 시스템의 상태의 일부였다. 그런데 다른 행동과의 관계가 복잡해지면서, 코드가 읽기 힘든 수준으로 가서 확장에 어려움이 있었다. (일반공격 중에 맞으면 경직으로 행동이 전환되므로, 경직도 행동이라고 할 수 있음)


이를 빗엠업 시스템에서 경직과 에어본, 누워있는 상태같은 것들은 대신 관리해줌으로서, 행동 시스템은 좀더 캐릭터 관점에서 능동적으로 할 수 있는 행동 상태의 집합에 가까워졌다.



2fb8d132f0c20bbf7dabd3b8479f343379680910254381b58a2105a8

(상태를 두개로 나눠서 관리함)


다음 일지의 내용은, 위의 시스템을 이용하여 고블린을 만든 이야기가 될 예정이다.



2ab2d22aecdc198f20b8dfb336ef203ec739c822bcb5798424

25b4c415fcc12ca363ed98b21fd7040377f59c476730fa5d7a2977


자동등록방지

추천 비추천

9

고정닉 3

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기
자동등록방지

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2850 설문 운전대만 잡으면 다른 사람이 될 것 같은 스타는? 운영자 24/04/15 - -
2852 AD 승리의 여신: 니케 1.5주년 특별 방송 보러 가기! 운영자 24/04/20 - -
154955 공지 주딱호출벨 [53] 에뚜갤로그로 이동합니다. 24.03.14 1139 2
114838 공지 🐣질문 글엔 말머리를 답시다🐣 [9] 로도타갤로그로 이동합니다. 22.12.15 4113 8
52873 공지 게임제작 초심자를 위한 글 모음 [9] Goranic갤로그로 이동합니다. 20.07.02 61676 50
123789 공지 뉴비 개임개발 하려는데 뭐부터 해야하나요 복사본 [13] 흉황갤로그로 이동합니다. 23.04.11 10604 16
108991 공지 인디게임개발 갤러리 규칙 - 질문 전 필독!! [23] 로도타갤로그로 이동합니다. 22.09.30 11390 17
157923 💬 게임사 처음에게 도움을 주세욤 [2] ㅇㅇ(222.107) 00:09 7 0
157922 💬 스파인 질문 ㅇㅇ(14.39) 00:03 4 0
157919 🐣질문 원래 터레인에서 레이캐스트 감지 안됌? [4] ㅇㅇ(114.202) 04.19 58 0
157917 📜일지 요즘 만들고 있는 디펜스 게임... [10] Noah갤로그로 이동합니다. 04.19 170 5
157915 💬 통신판매업 신고 관련해서 ㅇㅇ(180.224) 04.19 70 0
157914 💬 기획에 대해 알려드림 ㅇㅇ갤로그로 이동합니다. 04.19 87 0
157911 💬 기획 관련해서 모르는거 자세하게 알려드림 [18] 이치월갤로그로 이동합니다. 04.19 301 4
157910 🐣질문 유니티 초보)캐릭터 이미지 Sprite Library 교체시 깨짐 ㅇㅇ(211.107) 04.19 62 0
157909 🐣질문 유니티 초보) 귀신들렸는데 이거 뭔가요 [5] ㅇㅇ(112.148) 04.19 155 0
157908 💬 인게개갤에 개발일지 안올리는 이유 [1] ㅇㅇ갤로그로 이동합니다. 04.19 153 3
157906 🐣질문 뉴비 스파인 질문 [5] ㅇㅇ(58.235) 04.19 69 0
157905 💬 인게갤에 개발일지 안올리는 이유 [2] ㅇㅇ(27.119) 04.19 186 1
157904 💬 크로노아크도 인갤겜인데 언급이 거의없네 [4] ㅇㅇ(61.97) 04.19 167 0
157903 📢홍보 냥냥펀치 날리는 게임 리메이크 완료! [5] 노마리갤로그로 이동합니다. 04.19 150 5
157902 💬 나랑 같이 게임개발할사람 [1] ㅇㅇ갤로그로 이동합니다. 04.19 154 0
157901 🐣질문 플탐 조금이라도 채우고 리뷰 남기는게 나음? [5] ㅇㅇ(122.45) 04.19 121 0
157900 🐣질문 뉴비인데 문뜩드는 생각인데 [4] ㅇㅇ(114.202) 04.19 111 0
157899 💬 지금까지 봐온 인게갤 성공한애들 공통점 [4] ㅇㅇ(27.119) 04.19 260 1
157896 💬 전투방식 배낀게임 나오면 욕할거냐?? [7] ㅇㅇ(103.249) 04.19 229 1
157894 💬 게임 개발 공부를 좀 미뤄야하나 인생이 좀 뭔가뭔가네 [5] ㅇㅇ(211.212) 04.19 202 3
157892 💬 오늘한거 2 [3] 로코복실한갤로그로 이동합니다. 04.19 108 3
157891 💬 애매하게 아트할 줄 아는 게 참 ㅂㅅ인듯 [7] ㅇㅇ갤로그로 이동합니다. 04.19 266 0
157890 💬 인디게임개발에 있어서 제일 어려운 부분 [2] ㅇㅇ갤로그로 이동합니다. 04.19 121 0
157889 💬 아이템 시스템 효율적으로 만드는법 있나요 [2] ㅇㅇ(210.100) 04.19 93 0
157888 💬 주인공 도와줄 NPC들 컨셉아트 그리는 중... ㅇㅇ(175.212) 04.19 155 4
157887 💬 UI에 폰트 넣었는데 이거 왜 이런가요 [2] ㅇㅇ(61.74) 04.19 123 0
157884 💬 1달 전 나는 도대체 무슨 생각으로 코드를 짰을까.... asdf(175.198) 04.19 96 1
157883 🐣질문 님들 지원 기기 개수 얼마임? (중요) [1] ㅇㅇ(112.153) 04.19 123 0
157882 💬 창작자 튜토리얼 개발 레벨2 후기 [2] ㅇㅇ갤로그로 이동합니다. 04.19 145 5
157881 💬 visual novel engine 구입했다 [5] ㅇㅇ(222.98) 04.19 125 0
157880 💬 저 mbti 인티제인데 1인 게임 개발해도 될까요? [3] ㅇㅇ(121.174) 04.19 177 0
157879 💬 gpgs 질문좀 올릴께요 ㅇㅇ(118.218) 04.19 51 0
157878 💬 2d 게임 디자인은 뭘로 그림? [5] ㅇㅇ(222.232) 04.19 155 0
157877 🐣질문 구글 20명 테스트 첫 앱만 하면 되는거야? [4] 세큐갤로그로 이동합니다. 04.19 109 0
157876 💬 이 정도 도트 실력 있으면 겜개발이 10배는 재밌을듯 [9] ㅇㅇ갤로그로 이동합니다. 04.19 316 0
157874 💬 DOTS는 소식이 없네.. [7] Mr빙그레갤로그로 이동합니다. 04.19 156 0
157873 📜일지 리틀 엔젤스 개발일지 - 신규캐릭 카네쿠마 [3] cdr갤로그로 이동합니다. 04.19 160 5
157872 🐣질문 사업자 등록 관련 질문 [10] ㅇㅇ(110.14) 04.19 136 0
157870 💬 이 겜 진심 개쩌네 [12] 아이스말차라떼갤로그로 이동합니다. 04.19 455 2
157869 💬 씹냐링 유니티 ㅇㅇ(222.96) 04.19 73 0
157868 💬 스토브 창작자 튜토리얼 개발 lv.2 후기 [12] 레몬픽셀갤로그로 이동합니다. 04.19 456 10
157866 💬 팀원 일주일째 연락두절 [12] ㅇㅇ(124.28) 04.19 298 0
157865 💬 현 인디게임계 영앤리치 세계 원탑 [10] ㅇㅇ(220.72) 04.19 350 2
157864 💬 인디게임 마케팅 팁 [6] ㅇㅇ(27.119) 04.19 292 1
157863 💬 유니티 파티클 하고있는데 [2] ㅇㅇ(222.96) 04.19 59 0
157862 💬 형들 유니티에서 애니메이터 시간 0으로 초기화할수 없음?? [2] ㅇㅇ(222.232) 04.19 45 0
157861 💬 공겜 만드는데 제목 추천좀 [2] ㅇㅇ(211.34) 04.19 89 0
157860 💬 취미로 unity하다 돈벌 확률 얼마나 되냐? [10] ㅇㅇ(211.44) 04.19 266 0
157859 🐣질문 유니티 신버전 패치될떄마다 한다? 안한다? [8] ㅇㅇ(61.83) 04.19 152 0
157858 💬 혹시 소소하게 용돈 벌리는 게임 아는 사람? [3] ㅇㅇ(175.196) 04.19 201 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2