이야기 형식의 게임이다 보니... 없을 무->1->2->3->4->5 형태로 움직이는데 이전까지는 아무것도 없는 것에서 1로 가는 과정을 만들었고, 며칠전부터는 1->2로 가는 과정을 만들었습니다. 이제는 2->3으로 가는 과정만 만들면 3,4,5는 같은 방식으로 구현이 가능하겠죠. 하지만 게임 기능 구현 디자인을 잘못한건지 솔직히 조금 복잡합니다. public을 통해서 다른 canvas의 setactive도 너무 많이 썼다고 생각이 들구요. 하지만 처음으로 제대로 하는 프로젝트이다보니 더 노력해야하는 부분이라고 생각됩니다. 이번 프로젝트를 통해서 디자인패턴이나 게임 기능 구현을 하기 앞서 단순한 구현이 아닌 유지 보수가 가능한 코드를 짜야함의 중요성을 깨달아 가는 과정이 되었으면 좋겠습니다.
먼 훗날이 프로젝트를 포트폴리오로 사용하는 날이 온다면 까먹지 않기 위해서 적을 내용들입니다. 오늘 적을 내용은 좀 길 수도 있겠네요.
옆에 게임을 띄워놓고 천천히 적어볼까 합니다.
npc와의 대화와 컷씬의 대화는 talkManager가 구분되어 있습니다. npc와의 대화는 talkData, 컷씬에서의 대화는 timelineTalkData에 저장되어 있습니다.
timelineTalkData는 해당 컷씬의 마지막 장면에서 "\t"를 사용해 배열의 개수를 하나 늘렸습니다. 참고로, 해당 컷씬에서 마지막대사가 나오는 파트에는 다음 컷씬으로 이동해야 하기 때문에, if문으로 마지막 문장에 해당하는 인덱스와 "\t"를 제외한 배열의 개수가 충족할 경우, 다음 인덱스와 배열의 길이=0으로 맞추어 줍니다. 또한, textEndBool을 사용해서 컷씬이 끝나면 더 이상 대화가 이어지지 않도록 했습니다.
timeLine에 따라서 npc의 대화를 바꾸어주는
//이 부분 체크
if (GameManager.instance.timeLine == 2)
{
id += 1000;
}
부분은 mainCamera에 붙어있습니다. 이후 타임라인을 추가할 때마다 if문을 사용해 1000씩 늘려주면 될 것 같습니다.
지금 까지 구현한 장면소개부터 하겠습니다. 처음 정신을 차린 주인공이, npc들의 말을 듣고 광장으로 향합니다. 광장에서는 sphere콜라이더가 있어서, 충돌하는 순간 다음 timeLine으로 이동합니다. 그 다음 타임라인에서는 돌리 카메라로 카메라가 이동하면서 스페이스바를 누르라는 canvas가 켜지게 됩니다. 스페이스바를 다 누르면 timeLine이 증가하고, panel의 alpha값을 증가시켜서 화면을 하얗게 만듭니다. 그리고 다음 original함수를 waitforsecond로 일정 시간 이후 동시에 실행시켜 alpha값을 다시 0으로 만들죠.(0-transparent, 1-opaque) 그러면 원래 리스폰 됐던 장소에서 주인공은 다시 일어납니다. 하지만 npc들의 위치는 timeLine에 따라서 바뀌기 때문에 전부 바뀌어 있습니다. 첫번째 sphere콜라이더는 부딪치는 순간 기능 구현을 끝내고 사라집니다. 그리고 생성된 두번째 sphere콜라이더도 timeLine을 1 추가시키죠. timeLine이 3이 되면 spaceBar를 눌러서 사람들이 다 어디갔지..?에 대한 대사가 나오도록 플레이어를 유도합니다.
게임해보니 버그가 몇개 있어서 고쳤더니 새벽3시..어차피 내일 아침이나 오늘이나 잘 모르겠는건 매한가지이기 때문에 자고 일어나서 적도록 하겠습니다.
다른 게임에서는 어떻게 이동하고 카메라가 어떤지 궁금해서 마침 라이브러리에 있던 어쎄신크리드3를 해보았습니다. 화면 창의 위쪽 3분의 2지점에 캐릭터의 머리가, 아래쪽 6분의 1지점에 캐릭터의 다리가 있으며, 인터랙터블 오브젝트에 가까이 가면 오브젝트가 빛나면서 해당 키를 누를 것인지 확인이 됩니다.
대대적인 변경점이 있을 예정입니다. 기존의 1인칭 시점에 마우스 커서로 상대나 아이템을 정하는 방법은 불편함을 초래할 수 있기 때문에, 가까이 다가가면 반응이 가능하도록 변경하겠습니다. 물론 헬스장과 약속을 갔다온 다음 새벽에 변경할 계획입니다.
**지금 처음 시작 dolly camera를 껐기 때문에 몇초 뒤에 대화창이 활성화됩니다. 정상이니까 당황하지 말기.