시작 글

그저 꾸준히 같은 날 같은 일을 한다. 정말 쉬운 일인 듯 싶으면서도 실천은 정말 어렵구나.. 하는 생각을 매일 매일 하고 있다. 내가 하고 있는 모든 ‘습관’적인 일들은 조금이라도 긴장을 놓치면 금새 내 곁을 떠나갈 준비를 언제나 하고 있다.

또 어느새 내 옆에서 한참 도망간 이 습관을 잡아보려고 이렇게 또 키보드 앞에 앉았다.

오늘 개발을 시작하기 전에 마음을 다잡고자 하는 요량으로.

이번에 꽤 열심히 개발을 했던 듯 한데.

작업

screenshot
그간 작업 분량

여전히 맵 이벤트를 작성하고 있다. 작성하면서 부족한 부분이 너무 많이 드러나고 있는데 아직 해결을 못한 것만 해도 한참이다. 대화 분기, 맵과 맵 사이 이동 등.. 이제는 이벤트를 구현하기만 하면 된다고 생각했던 때도 벌써 한참 옛날 같다. 결론적으로는 아직까지 이벤트를 구성하기 위한 준비 작업만 한참 한참 하고 있는 셈이다.


1. 동행인 이미지로 주인공 이미지가 변경되는 기능

맵의 특성 상 주인공 옆으로 동행자가 나오지 못하는 경우가 생길텐데, 그럴때를 대비해서 만든 기능이다.

지금 플레이하고 있는 애니메이션 정보를 그대로 사용해서 플레이 시켜 줌으로써 캐릭터의 방향도 유지시키도록 했다.

캐릭터의 방향 정도는 직접 가지고 있는 편이 좋을 것도 같지만.. 그 부분은 정말 정말 필요하다면 구현하도록 하고 패쓰.


2. NPC 충돌 이벤트 기능

현재까지는 주인공이 주체적으로 이벤트를 발생시켰는데, 주인공을 따라오는 NPC의 경우 그 NPC의 동작이 이벤트의 트리거로 동작해야 했다. 그래서 기능을 추가했다.

이를 추가하면서 몇 가지 예외상황이 발생했는데, 뭐 건 by 건으로 해결하는 수밖에. 이벤트가 진행되고 있을 때 AI가 움직이는 문제라거나, 주인공이 빠르게 움직이는 동안에 트리거링이 발생해서 바로 앞이 아닌데도 이벤트가 발생해 버린다거나 하는 등이다.


3. 이원화 된 CustomUpdate 기능 통일

기본 오브젝트듣의 Udpate가 아니라 임시적으로 사용할 Update의 기능이 이원화 되어 있어서 하나로 통일했다. 인터페이스가 조금 다른데, 좀 더 범용적으로 사용할 수 있는 형태를 남겼다.

그때 그때 기능을 만들다 보니 종종 생기는 일이다.


4. 대사 시 대상으로 스크롤시키는 기능

이건 사이드 이펙트가 반드시 있을 것 같지만, 어쩔 수 없이 적용시켰다.

말풍선의 가로 길이는 분명 조절이 가능하지만, 자체적으로 길이를 조절하고 있진 않아서, 화면에서 잘리는 경우가 왕왕 발생한다. 나중에 동료가 많아진다면 반드시 문제가 생길 것이다.

그렇다면 어떻게 해결할 것인가.. 만약 주인공처럼 늘 대사를 하는 캐릭터가 화면 중앙에 위치한다면 말풍선의 가로 길이를 일일이 조정할 필요가 없어진다.

그래서 그냥 적용.

문제가 생긴다면 후일 다시 적도록 해야지.


5. 오브젝트 풀링 기능

저번의 프레임 저하는 코로나의 DrawableObject들 문제로 판명났다. Visible 처리로 Draw만 시키지 않으면 퍼포먼스가 좋아질 거라는 낙관적인 관측은 실패했고.. 결국 풀링 기능을 넣어야 했다.

난감한 것이, 이 코로나 오브젝트는 기존 루아의 테이블에 넣어서 보관하면 문제가 생긴다.. 그래서 좀 기형적인 형태로 일단 타일에 풀링 기능을 적용시켜 보았다.

퍼포먼스 향상은 확실했지만, 코드가 너무 조잡하다.. 마음에 안 든다, 안 들어..

일단 다른 오브젝트들에도 적용할 수 있게 기능을 제네릭하게 리팩토링 하는 작업을 이어서 진행할 생각이다.


맺음 글

정말 신나게, 많이 코딩했다고 생각했는데 그닥, 그닥 많이 하진 않았다. 저번주 월요일도, 이번주 월요일도 그냥 연차 내고 데이트 했기 때문이기도 하지만.

너무 스트레스 받지 말고 즐기면서 코딩해야지. 도곡 도곡