이전부터 게임 제작했던건 부분적으로만 보여준거같아서


이참에 제대로 뭐 만드는지 게임 컨셉같은거 보여주려고 글써봤어


게임 장르는 턴제 로그라이크라고 해야하나 뭐라 정의는 못내리겠다


일단 이게임의 주된 컨셉은 시야시스템이야 


일반적으로 케릭터 주변으로 실시간으로 맵이 생성이 돼 


a67a05aa1806b34997f1d1bc10f11a3978c85386a27c6536c196


이런식으로 움직이면 시야에 맞게 맵에 생성되고

시야라는걸 강조하려고 쉐이더도 빛에만 반응하게 만들었어 

만약 조명이 약하다면 해당 오브젝트는 alpha값이 0되어서 완전 투명하게 렌더링돼 


a15420aa1806b34b9aff5a6ede5dc1d47ae0723c3f3a8236c6e60427e1b78c5f


이게 빛이 없는부분이 어두워서 안보이는게 아니라 그냥 아무것도 없어서 검게 렌더링 된거라고 보면돼 그래서 조명이없다면 해당 위치에 뭐가있는지

플레이어는 잘알수가없어


그럼 결국 시야로 무엇을하냐가 가장 중요한거자나 

그예시야



a15714ab071eb444a2332c7c58d62d3bc61d2f82ad9c8f5017aceafeade1


이런식으로 스킬을 사용할때 스킬경로에 아무것도없다고 판단되서 쏘면 실제로는 벽이 있어서스킬이 막히는 경우가 생기고




a17d31ad352eb274a2f1d1bc10f11a39a4ec547c55444a4a1e42

적같은 경우에도 시야내 에 있어야지만 보이고 가까이가면 인기척 표시로 표기를 하는거지



a15714ab062eb369b634344d565dc2d1b2e04684f2ad32448ba225d07487996979f4092e51

이런게임에 턴제이다 보니깐 이동에 제한을 있어야한다고 생각했고 이동할때, 스킬사용할때 스태미나가 소모되어서 각턴에 할수있는 행동을 제한 시켰어




이제 여러유닛이 이렇게 각자 스태미너를 소모해서 3d공간상을 움직이면서 전략적인 스킬을 사용하는데 이걸 어떻게 AI로 만드냐...

정말 뇌 터질거같더라고 그래서 일단 단계를 나눴지 

기본적으로 시야를 이용하는 게임이다 보니깐 적도 시야를 보고 그거를 기억해서 움직인다 라는걸 전제하에 만들어야겠다는 생각이들더라고 그래서


첫번째로 기억력 만들기


a17d31ac3d02b450bb34167058d62d3b757dd2a76d1e28e6d5dc3578d73e


이런식으로 적이 본인의 시야내로 움직였던 지형을 기억해 뭐 시야내로 유저케릭터를 발견하면 그케릭터 위치도 기억하는거지

이제 이기억을 바탕으로


두번째 모든 공격할수있는 스킬 종류 뽑기 (지금 내용은 복잡하니깐 대충 넘기고싶은사람 넘겨봐)


일단 스킬의 사거리를 6이라고 가정할게 내가 스킬을 사용할 유저유닛 기준으로 6칸 내에 있는 모든 블럭을 가져오는데

적 유닛이 이동해서 기억하는 기준으로 블럭을 가져와

그럼 그위치로 가야 적어도 스킬을 맞출수있다는 이야기니깐 각 블럭중에 A*알고리즘으로 갈수있는곳이 하나라도 있는지 판단을하고

거기서 스킬을 쐈을때 스킬이 맞는지 ray를 쏴서 확인 여기서는 모든 경로를 확인하는게 아니라 최소한 스킬을 맞출수있는지만 확인하는거야

이 두가지가 끝나면 적어도 해당 유닛에는 이스킬이 맞는다는 확정이 있어


이제 세번째 최적의 조합 찾기

이런식으로 각 유닛별로 사용가능한 스킬목록을 뽑아 그리고 각 스킬목록중에 어떤 조합으로 공격해야 최고의 점수를 내는지 확인하고 최고 점수를 내는 스킬 조합을 찾아내

이제 최고의 스킬 조합을 찾았으니 스킬을 사용할때 최적의 거리에서 공격하기 좋은 위치를 다시 또 찾아내서

최종적으로 행동이 결정돼


마지막 네번째 행동하기

행동 데이터를 넘기면 행동트리로 해당 행동을 하는형태야


a17d31666f01ed2cbc7698b21fd7040319ba053500ff330190a6040c


a04b39ad0a2bb54cb634107958d62d3bc77c2b05eb7113f7840d0d55e7



정말 많은 버그와 자꾸 이상한 행동을하는 적AI때문에 대가리 터질뻔했지만 이제 안정화되서 플레이할수있을정도가 됐어

뭐 보면 대충 최적화 중요할거같다고 이야기 할거같은데 글에는 쓰지못했지만 나름 최적화를 하려고 노력을 많이했고 그걸 글에 담지는 못했어..

A*알고리즘부터 전부 내가 만들어서 최적화가 좀 어케 되더라고 


여튼 긴글 봐줘서 고맙다

이번에 플레이엑스포참여해서 어차피 이제 공개될거 글이나 써봤어 오는사람있으면 아는척...? 까지는 아니여도 그냥 한번 방문해줘