2019년 4월 29일 월요일

[20190429] Sight Part.2

대기 상태가 오락가락 하는 요즘 입니다.
산책은 많이 하고 SNS는 덜하는 그런 하루 하루를 보내고 있습니다.

이번달 산책 목표치는 150km 였습니다.
초미세 먼지 수치는 좋지만 미세먼지 수치는 나쁨이던 어느날...
할당량에 압박을 느끼고 무리해서 산책을 나가봤는데 눈의 상태가 급격히 나빠지더군요.

대기질이 온전할 때만 나가기로 했습니다.
( ㅇ_ㅇ)y-~



작업 이야기를 해볼까요.
이 일지는 4월 18일, 19일, 22일 ~ 26일, 29일 까지의 작업을 대상으로 합니다.

작업 내역은...
  1. 시야 시스템 조정
  2. 시야 시스템에 맞추어 기존 기능 조정
...입니다.

이렇게 적어놓으니 무척 간단해 보이는군요.



1. 시야 시스템 조정

지난 작업에서는 시야 탐색 로직을 개선했습니다. 정확히는 Monster용 시야시스템을 개선하는 작업이었습니다.

이어서 Player의 시야 시스템을 개선하는 작업이 이어졌습니다.

사실 "Player의 시야" 라고 부르기에는 민망한 상태였는데요.
  • 시야 Stat이 없고
  • 시야의 형태가 현재 위치의 Tile 속성에 좌우되고
  • Player는 그저 시야의 기준이 될 위치를 제공하는 정도
...라서 "Player의 시야" 라기 보다는 "Game의 시야" 라는 표현이 더 어울리는 상황이었습니다.

그러다보니 관련 기능이 Player와의 특별한 접점 없이 흩어져 있었고 일을 많이 어렵게 만들었습니다.

일부 기능은 Zone AI에 가 있었고
다른 기능은 Map Shadow View에
어떤 기능은 Player AI 에
...작성 되어있더군요.

작업의 시작은 관련 기능을 모으는 작업이었습니다. 다 모았더니 시야 탐색을 담당하는 Watcher가 4개로 불어나 있었습니다.

흩어진 기능 1개당 Class 가 1개씩 늘어난거죠.

재사용성을 고려해서 중복기능을 분리해내고, 분리 자체에 의미가 있지만 재사용되지 않을 기능을 통합해서 Watcher 는 2개로 정리 되었습니다.

이 과정에서 많이 힘들었네요.
( '_')y-~

그러나 용을 썼다고 작업이 거기서 끝나줄리가 없지요.

Test Scene을 돌려놓고 생각해보니 시야가 유효한 공간만을 감지해서는 안된다는 생각에 도달했습니다.
길만 보여서는 답답하기 때문에 시야가 닿은 벽들도 찾아서 화면에 적용해줘야 한다는 것이죠.

그리하여...

< older >

< new >

이렇게 조정되었습니다.

작업 도중에...
시야의 갱신 시점 조절
같은 위치에서 재 갱신이 요청되는 경우의 효율적 처리
무리 없는 시야 갱신
자연스러운( ? ) Interface
...등을 위해 많은 시간이 들어갔습니다.

코드 한 무더기를 작성해놓고 날리기를 여러번 반복했는데 날리면서 아쉬움보다 홀가분함, 시원함이 느껴져서 다행이었네요.
( @_@)y-~



2. 시야 시스템에 맞추어 기존 기능 조정

작업 이야기 이전에 이 게임의 <환경> 이 어떻게 표현되는지에 대해서 약간의 설명을 해볼까 합니다.

<환경>은 지형, 안개, 시야로 표현됩니다.

각각의 요소는 다음과 같이...

< 지형 >

< 안개 - 일명 "전장의 안개" >

< 시야 >

개별적으로 Texture에 그려집니다.

이걸 가져다가
지형에 Gray Scale을 적용하고
Fog를 덮어 씌우고
시야의 색상을 뒤집어서 떠내면


...이런 결과물이 되는 것입니다.

작업은 시야 시스템을 적용하는 것으로 시작했습니다.
이전의 동그랗고 네모나던 시야를 TileMap 기반으로 바꿔야 했습니다.

<지형> 이나 <안개> 도 TileMap 기반이지만 <시야>에 적용하기에는 적절하지 않더군요.

<지형> 은 TileMap 이 가득 차있고 양적인 부분에서 변화가 없습니다.
<안개> 는 가득 채워져 있다가 게임이 진행됨에 따라 비워집니다.
<시야>는 비워져 있다가 시야에 해당하는 부분만 채워야 낭비 없는 작동이 가능합니다.

<지형> 이나 <안개> 에 쓰이던 기능을 그대로 사용해도 문제는 없지만 효율성을 고려해서 <시야> 를 위한 기능을 별도로 작성했습니다.

작업 도중에 기존의 Light Node를 대신할 Erase Node를 추가했습니다.
이 녀석은 시야 영역을 떠내는 역활을 잘 수행하고 있습니다.

두번째 작업은 안개를 지워내는 기능의 조정이었습니다.
이전에는 그저 네모나게 지워낼 뿐이던 것을  시야의 모양에 맞추어 지우도록 조정했습니다.

그 외에 Interface 조정이나 Test Scene 작업등 여러 재미없는 것들을 정리하며 작업이 마무리 되었습니다.

지금 Game의 모습은...


...이런 상황 입니다.

시야 표현용 Tileset 조정 작업을 진행해야 하지만 조금 지쳐서 미뤄 둡니다.
@_@

일지는 여기까지 입니다.



상당히 긴 기간을 이 작업에 몰빵했는데 작업 내역을 확인해보니 100개도 되지 않습니다.
전 도대체 얼마나 많은 코드를 저 멀리로 날려버린 걸까요. @_@

Game의 모양이 어느정도 잡힌 것 같아서 기쁘기도 하고, 홀가분 하기도 합니다.

이전의 시야 시스템이 전해주던 안정감( ? )이 사라진 것은 아쉽지만, 전략적 움직임의 유도와 긴장감의 전달이라는 목표는  달성한 것 같습니다.
늘 그렇듯이 얻는게 있으면 잃는게 있는거겠죠.

작업들이 많이 밀려 있지만 앞으로 한 달은 BIC용 Build를 준비하게 될 겁니다.
"완성된 Intro" 와 "던전 한 Set"가 목표인데 어찌 될런지...


다음 일지는 좀 더 이른 시기에 작성 하겠습니다.
환절기 건강 관리들 잘 하시고.
다음 일지에서 만나요.
( '_')y-~

> 3번 고침

댓글 2개:

  1. 굉장히 많이 다듬어진 느낌이에요. 겉으로 보기엔 거의 완성처럼 보이는데, 실은 아직 많이 남아있겠죠?
    BIC 출품하시는군요. 좋은 결과 기대하겠습니다!

    답글삭제
    답글
    1. 끝나지 않는 마지막 10%... 아마 그런 상태겠죠.

      출품 까지 도달만해도 성공이지 싶네요.
      ( +_+)y-~

      삭제