백업은 필수

턴제제작 2020. 3. 31. 23:27

 

 백업 수단이 두개가 아니였으면 큰일 날뻔 했다. 알수 없는 오류 때문에 작업을 다시 돌렸어야 했는데 하필 유니티 백업 시스템이 먹통이라 해당 부분으로 돌아가는게 안됬기 때문이다. 깃까지 이중으로 백업해 두길 잘했다. 여튼 하루 작업 날렸지만 이런 일은 코딩에서 피할수가 없으니 다시 침착하게 작업을 이어나간다. 

 아마도 코드 작업 하나 하고 확인하고 이런게 아니라 4시간 동안 중간에 확인도 안하고 쭉 코드를 짰더니 나도 모르는 곳에서 사단이 난듯 싶다. 너무 자만을 한듯 싶다. 시간이 걸리더라도 다시 머 하나 추가하고 확인하고 머하나 추가하고 확인하고 이런식으로 가야 겠다.

 한 10년만 늦게 태어났어도 한참 머리 빠릿 바릿 돌아갈때 이 일을 시작했을텐데 이런 생각이 들때가 있다. 나 어렸을때는 유튜브 유데미 코세라 같은거 없었고 안드로이드 머 이런것도 없었고 언리얼은 엄청난 고가의 물건이고 오픈소스들은 쓸만하지도 않았고 그렸다. 머리도 이미 다 굳어버렸는데 무슨 부귀 영화를 누리겠다고 이걸 하겠다고 뛰어 들었는지 모르겠다.

 이번엔 코드를 점증적으로 짜나가자. 

 일단은 랜덤하게 셔플을 돌리고 있지만 나중에는 우선순위를 정해서 돌릴 생각이다. 여기서는 효용이라는 개념을 쓸꺼다. 일종에 별도의 평가 함수를 만드는 것다. 이게 우리가 가격이란 정량적 지표 이외에 주관적인 만족감 같은거를 따로 숫자로 표시할수가 있는데 이걸 효용함수라고 부른다. 시장 경제에서는 다이아몬드 vs 물 처럼 가격이 실재 가치와 일치 하지 경우가 많기 때문이다. 여튼 그걸 응용해서 별도의 가치값을 평가하는 함수를 만들고 여기서 때리는 쾌감이 높은 순서대로 정렬을 시키면 될듯 싶다. 물론 이건 어느정도 아이템 스킬 클래스 등이 만들어 져야 의미가 있기 때문에 현 단계에서 만들것은 아니다.

 다시 차근 차근 만드니까 머가 문제였는지 알아 냈다. 그 부분을 고쳤다. 

 코드가 if문 도배가 되는 스파게티 코드가 되어가니까 한번은 정리해야 할듯 싶긴하다. 

 원래 분석 철학 공부를 하다가 우연히 프로그래머 수학으로 생각하라 라는 책을 보게 됬고 프로그래밍 수업을 듣게 되었는데 너무 재미가 있었다. bool하고 if문를 도배를 하면서 생 노가다로 이상한거 만들고 그랬던 기억이 난다. 

 물론 지금은 처음 프로그래밍 배울때 만큼 재미가 있지는 않다. 

 까페 갔다가 왔는데 타블릿 팬이 보이지 않는다. 까페에 두고 온거라면 다행인데 잃어버린거면 큰일이다. 

 코드를 약간 행동트리에 가깝게 만들어야 할 필요가 있을듯 싶다. 에셋을 쓰면 좋겠지만 기존 코드와 융합하는 것도 또 따로 배워야 하는듯 싶어다. 종이에 도식도만 짜고 걍 코딩으로 만들어야 하지 않을까 싶기도 하다. 

 버그가 발생하면 그냥 멈춰서 있는게 아니라 느낌표를 뜨게 한다던지 당황해 하는 모션을 넣는 것도 좋을듯 싶다. 그리고 미션 1 이름은 게임에서 이기고 싶다면 똑똑하게 굴어야 할꺼야 같은걸로 정해야 할듯 싶다. 시작할때 캐릭터가 대사창으로 그런 맨트를 날려 주는 것도 나쁘지 않을듯 싶다. 난이도는 이런 트릭들을 활용해야만 이길수 있는 난이도로 만들어야 겠다. 너무 어렵게도 아니고 그냥 일반적이게 하면 이겨도 이긴게 아닌 피로스의 승리를 하도록 하는 정도의 난이도로 말이다. 물론 턴제 전략 게임을 안해본 사람들은 절대 못 깨도록 한다.  

 if you want to win, be smart.

 첫번째 미션 이름은 이게 좋을듯 싶다. 

 테슬라의 자율 주행차는 레이더와 카메라라는 두 종류의 감각기관을 통해서 정보를 습득한다. 이게 경제학에서는 완전정보를 가정하고 정보를 습득하는데 비용이 들지 않는다고 가정하지만 현실에서 인간이든 자율주행 자동차든지 간에 정보를 습득하고 해석하는데도 에너지를 쏟아야 한다. 정보에는 비용이 있다. 정보의 비용과 더불어 인간 두뇌의 연산 한계 때문에 합리성이 제한 되기도 한다. 미니 슈퍼 컴퓨터를 쓴 테슬라와 달리 게임의 경우에는 더 제약이 크다. 퍼스널 컴퓨터에서도 돌아야 하기 때문이다. 다시 사람으로 넘어가면 인류는 극히 최근을 제외하고는 절대 빈곤의 시대속에서 늘 배가고팠다. 그렇기 때문에 인간의 경우에는 주어진 대로 하면 정확한 답을 찾아갈수있는 알고리즘 보다는 오류 가능성이 존재하지만 시간과 배고픔은 늦출수 있는 휴리스틱을 더 선호하는 쪽으로 진화를 해나갔다. 이러한 것들에 착안해서 작업을 이어나갈꺼다. 

 3가지 경우를 상정해 볼수가 있다. 센서에 들어왔고 시야에도 보여서 이동을 해서 때리는데 문제가 없는 경우다. 이경우는 이미 만들어 두었다. 두번째 경우는 보이지는 않지만 센서내에 있고 적절한 이동 즉 한칸 정도를 소모해서 탐색을 하면 적을 가서 때릴 수 있다는 거다. 이경우 원거리 공격과 같이 이동을 한다음에 원거리 공격이 아닌 근접해서 때리게 하면 된다. 세번째 경우는 센서에는 잡히지만 두칸의 이동력을 소모에서 때리기에는 조금 부족한 경우다. 벽이 워낙 길어서 돌아가기가 여이치 않은 경우이다. 이경우에는 벽뒤에 있는거 같지만 내 턴에서 해결할수 없으니 조금 이동해서 방어 스킬을 쓰거나 그래야 할듯 싶다. 아직 방어 스킬을 만들지 않았기 때문에 그냥 아군 근처로 이동하거나 머리에 느낌표를 띠어야 겠다. 느낌표도 아직 안만들었으니 일단은 그냥 서있게 하자. 

  천천히 작업을 해 나가자. 저번에 너무 확확 코드를 쳐나갔다가 어디서 문제가 발생했는지도 모르고 다시 시작했으니 말이다. 일단 수도 코드 비슷하게 써봤다.

 코드가 에너미에서 타일로드로가고 에너미가 플레이어로 가는게 아니라 플레어어가 타일로드로 뛰어 올수 있는지 여부를 확인한다. 일종에 편법을 쓴거라서 나중에 병종이 많아지면 조금은 복잡해 질 수가 있다. 약간 더 정확하게 하려면 플레이어가 플레이어 옆타일을 거쳐서 뛰어 와야 하긴 한데 일단은 넘어간다.

 잘 동작했으면 좋겠다.

 일단 원거리 공격이 나가긴 한데 뒤에 있는 적을 타격하기 위해 잘 이동을 한다. 이걸 근접 공격으로 만들고 장애물에 대한 테스트를 마치고 코드 정리를 하면 프로그래밍 적인 부분은 일단은 마무리가 될듯 싶다. 여기다가 그럴듯하게 장애물들을 배치하고 테스트 버전을 만들어서 재출을 한다. 아직 스킬이나 마정석을 모아서 로봇을 소환하는등에 요소는 일단 생략을 한다. 여기에다가 캐릭터 옷을 입힌다음에 미션 1으로 제출하도록 하고 일단 신경을 끄고 미뤄뒀던 작업들을 추가한다. 아마 잘 풀린다면 9월달에 행사를 할때는 제출 버전에는 담기지 않았던 많은 것들이 구현이 될듯 싶다. 

 턴 넘어가는거에 한해서는 행동이 다 끝난다음에 이루어 져야 할듯 싶다. 

 그전에 검기를 날리는걸 막기위해서 길찾기가 안되면 검기를 날리지 않도록 bool시스템으로 만든다. 이때는 그냥 느낌표 시스템을 만들어서 패닉에 빠지도록 해야 겠다. 즉 휴리스틱의 문제로 AI가 제대로 작동하지 못한 버그 상황에서는 제자리에서 패닉 모션이 나오게 말이다. 버그인지 모르게 말이다. 

 너무 이상하게 뛰는 거 같아서 그냥 바로 뛰어가게 해야 겠다. 

  판단만 그런식으로 가게 하고 뛰어 가는거는 그냥 길찾기로 뛰어 가도록 한다. 

  한가지 더 테스트 하면서 안 사실인데 인공지능이 가급적 가까이서 쏘는게 아니라 최대한 멀리 떨어진 사정거리 아슬 아슬한 거리를 선호한다는 거다. 먼가 노드를 배열하는 순서라든지 내가 의도하지 않는 먼가가 있어서 그런듯 싶다. 여튼 이유는 알수가 없다. 

 새로 코드 진행을 나가기 전에 코드를 정리하는 시간을 가져야 겠다. 일단 새로운 요소들을 추가하지 않기로 했기때문에 가능한 일인듯 싶다. 

 shift + tap 키를 누르면 당겨진다는걸 그동안 몰라서 일일히 당겼었다.

 코드 정리를 하니 좀 살거 같다. 이제 여기에다가 길찾지 못할때 대처랑 두칸범위에 있을경우에 대한 대처를 추가하면 될듯 싶다. 

 

'턴제제작' 카테고리의 다른 글

올빼미 인간  (0) 2020.04.07
깃헙 꼭 써라  (0) 2020.04.06
어느 누군가가  (2) 2020.03.31
오늘의 작업  (0) 2020.03.29
원거리 AI [영상]  (0) 2020.03.28

WRITTEN BY
아이고이아

,