옛날 코드를 갈아 엎어보자

DeDi·2023년 2월 7일
post-thumbnail

그때 그 순간에는 최선이었겠지?

처음으로 코드를 작성하던 그 당시에는 프로그래밍 자체가 익숙하지 않던 터라 '모로 가도 서울만 가면 된다'는 마인드로 기능 구현하기에만 바빴다.
예를 들면, "1호선에 역이 여러 개가 있는데 이것 들을 각각의 버튼으로 구매 처리 하려면 어떻게 하지?" 라는 생각에 버튼에 각 역마다의 인덱스를 심을 생각도 않고, "일단, 확인 메시지를 띄우니까 확인 메시지에 적힌 역 이름으로 판단하게 해야겠다!"라고 생각했고, 이런 코드가 나왔다.

public static int bool_whaseo = 0;
...
if (Station_Name.text == "화서역") {
	if(MyAsset.now_money >= subway_Stations1_1.price_whaseo)
	{
    	// 노선도상의 버튼 색상 변경
		whaseo_button.GetComponent<Image>().color = Color.blue;
        // 구매 처리 
		subway_Stations1_1.bool_whaseo = 1;
		MyAsset.now_money -= subway_Stations1_1.price_whaseo;
		MyAsset.NumOfStations++;
		DataManager.SaveData ();
	}
	else if(MyAsset.now_money < subway_Stations1_1.price_whaseo)
	{
    	// 돈 부족 안내 메시지 출력
		PlayManager.instance.LackOfMoney();
	}
}

정말 작은 부분만 가져왔는데, 저런 코드가 역마다 복사-붙여넣기로 여기저기 널려있다고 보면 된다.
일부분만 가져왔음에도 정말 문제점이 많아보인다.
성능 측면에서는 Button으로 받으면 될 것을 괜히 GameObject로 버튼을 등록하여 GetComponent를 불필요하게 사용하도록 만들었으며,
유지 보수 측면에서도 하드코딩의 문제, 일관되지 않은 변수/함수/클래스 이름 스타일, 불필요한 public static 남용 등등 정말 다양한 시행착오가 개발 초기단계의 코드에 산재해있다.

개발 측면에서만 문제가 있던 것도 아니었다.

플레이어 분들이 플레이스토어에 남겨주시는 리뷰나, 다른 채널을 통해서 게임에 대한 후기와 의견을 주시면서 이런 얘기를 몇번 보았다.

"오토터치(매크로)를 쓰니 게임이 재밌어요"

이 후기를 보고 정말 여러가지 생각이 들었다. 일단 게임 자체가 오프라인 게임이다보니, 다른 사람들과 경쟁이나 소통을 하지 않아서 공평성의 문제가 깊지 않았고, 게임상에서 제재도 할 수 없다.
사실 제재 보다도, 왜 이 플레이어분이 오토 터치를 사용하면서 재미있다고까지 의견을 남길 지경이 되었을까에 대해 생각해보았다.
치트나 매크로 같은 게임을 지나치게 쉽게 만드는 외부 프로그램을 쓰면 당장은 재미있을지언정, 적절한 스트레스나 긴장감 없이 모든걸 쉽게 구매하고 보상을 받기 때문에, 금방 흥미가 떨어지기 마련이다.

그래서 바로 현재 밸런싱이 어떤 상황인지 분석을 해야했다. 과거에 작성했던 엑셀 시트나, 기타 자료들은 모두 오피스 프로그램을 다루기 서툰 때라 수치적인 기록만 보는데에 의미가 있을 뿐, 분석을 하기 적절하지 않아서, 새로운 양식을 만들어서 게임의 난이도가 어떻게 설정되어 있으며, 난이도의 계단이 얼마나 적절하게 분포해있나 분석해보았다.

초반 난이도는 당연하게도 그닥 어렵지 않고 쉽고 빠르게 다음 단계로 나아갈 수 있도록 설계되어 있었다. 하지만, 계속 다음 노선으로 진행을 해 갈수록 난이도가 급격하게 증가하는 문제가 있었다.

난이도가 급등하는 문제의 원인을 찾아보니, 난이도 기준치를 올릴 때 특정한 기준 없이 난이도 증가치를 점차적으로 늘려가다보니 그 차이 또한 기하급수적으로 올라가게 되었고, 이를 고려하며 난이도 수치를 수정해갔다.
이렇게 개선한 이후에도 몇 차례 설문조사 및 밸런싱 데이터를 계속 분석해가며 개선해 나갔다.

눈에 안보이는 것을 고치는 김에?

이전 코드는 개발의 확장이 어려울 뿐, 2D UI 게임이었기 때문에 게임을 못할 정도로 느린 것은 아니었고, 코드의 리팩토링은 플레이어 분들이 체감하기는 어려웠을 것이다. 기획적인 측면에서 난이도를 계산한 것은 앞으로 즐길 콘텐츠의 난이도는 적당하게 느끼겠지만, 변화의 폭을 느끼기도 어렵고, 새로운 사용자를 확보하기에도 크게 임팩트가 있는 작업은 아니었다. 사실상 앞선 2가지는 내실을 다지는 작업이었으며, 내실을 다진 게임으로 사람들을 다시 불러모으려면 눈에 띄는 변화를 주고, 사람들이 이 게임을 해보고 싶다는 마음을 만들어내야 했다.

그래서 게임의 배경, 아이콘, UI, 모두 직접 일러스트레이터로 그리기 시작했다.
사실 손가락 능력만 된다면 포토샵으로 직접 그려내면 좋겠지만, 내 손은 내가 원하는대로 그려주지 못하기에, 컴퓨터의 힘을 빌려 도형을 만들고 그것으로 아트 리소스를 만들었다.

일전에 UI에 일관성이 없어보인다는 의견에 최대한 일관성을 맞추고자 노력했다. UI의 일관성이라는게 시스템적으로도 일관성이 있어야 하지만, 우선 아트 리소스 제작 측면에서라도 일관성을 가져보자는 마음으로 작업을 했고, 다음과 같은 결과가 나왔다.

(Before)

(After)

UI의 이미지와 배치를 일관성 있게 정리하고, 깔끔하게 보이도록 노력했다.
그리고 배경에 승강장 이미지를 보다 현실감 있게 제작하여 지하철이 좋아서 게임을 즐기는 플레이어 분들이 더 몰입해서 게임을 즐길 수 있도록 하였다.
이렇게 작업한 이후에 역의 이름을 지정하거나, 노선을 지정할 수 있게 해달라는 의견과, 실제로 열차가 지나가게 해달라는 의견이 있어서 현재는 모두 반영하여 설정에서 노선과 역을 지정할 수 있고, 일정 시간마다 열차가 정차하여 문이 열리고 대기하였다가 문을 닫고 출발하는 애니메이션 효과를 연출했다.

기획, 아트, 개발 모두 혼자 해내기는 쉽지도 않았고, 시간도 많이 소요됐다.
항상 게임을 개발하면서 느끼는 것이지만, 제대로 무언가를 만드려면 마음이 잘 맞는 사람들과 적절하게 역할을 나누어서 서로 의견을 나누고 리뷰하면서 개발해야 한다는 점을 느꼈다.
그래도 혼자 모든걸 하다보니, 개발만 했다면 몰랐을 고충이나 경험들을 해보았다는 것이 의미가 있다고 생각한다.

0개의 댓글