(유니티3D)기믹분석1 (모닥불, 바이러스)
팀프로젝트에서 제가 맡은 부분은 크게 3개. 캐릭터, 기믹, 보스입니다.
이 글에선 기믹에 대해서 씁니다.
기믹이란 단어는 저도 팀프로젝트 하기 전엔 많이 들어보지 못한 단어인데 여기선 게임 내에서 플레이어를 제외한 기능을 갖춘 모든 오브젝트.. 라고 보시면 편할겁니다.
여기에 NPC도 포함인진 잘 모르겠지만 아무튼 맵 그 자체인 환경 요소를 제외하곤 전부 기믹이라 봐도 될 거 같습니다.
기믹들은 전반적으로 지저분하고 비효율적인 부분이 많습니다.
저의 실력이 시간 경과에 따라 바뀐 것도 있지만 아마 도중도중 기획이 많이 바뀐게 가장 큰 원인이 아닐까 싶습니다.
그러다 기획자가 원래 A의 의도로 코드를 짜다가 중간에 B로 바뀔 것 같은 느낌을 줍니다. 그러면 A로도 사용할 수 있어야 하고 B로도 사용할 수 있어야 하는 코드를 짜야합니다.
최종적으로는 A든 B든 하나의 의도로만 쓰게 되지만 꽤 나중에야 확정이 나버려서 안 쓰는 부분도 고려한 코드를 거의 그대로 쓰는 수밖에 없기에 지금 보면 왜 이렇게 코드를 짰을까 하는 부분도 많이 보입니다.
고로 여기에 글을 쓸 때는 불필요하다고 판단되는 부분은 전부 제외하도록 하겠습니다.
기믹분석 글에서 설명하는 순서는 tree-sha 첫글에 간략하게 정리해 둔 글 순서로 작성합니다.
1. -모닥불-
이렇게 생겼습니다.
이 게임의 저장 시스템을 맡고 있습니다.
그러나 여러가지 이유로 많이 아쉬운 저장 시스템이 되어버렸습니다.
기능은 간단합니다.
모닥불마다 커다란 콜라이더가 존재하는데 캐릭터가 그곳을 통과할 때마다 리스폰 오브젝트의 좌표가 갱신되고 실드를 다시 회복시켜줍니다.
단, 뒤로 가는 것을 방지하기 위해 이전 모닥불로 돌아가도 저장은 되지 않습니다.
Hierarchy에선 이렇게 배치 되어 있습니다. 부모는 모델링이고 자식은 콜라이더입니다.
여기선 보이지 않지만 플레이어 캐릭터의 좌표를 정해줄 더미 오브젝트가 존재하는데 이 더미 오브젝트에 DontDestroyOnLoad()를 걸어 다시 씬 로드를 해도 파괴되지 않게 해줍니다.
그리고 모닥불에 닿을 때마다 이 더미 오브젝트의 위치를 해당 모닥불로 옮겨주면 죽어서 씬 로드가 다시 될 때마다 이 좌표로 캐릭터가 옮겨진 후에 시작하게 됩니다. 이런 방법 때문에 게임을 끄게 되면 저장이 날아가는 휘발성이 되었습니다. 게임 분량을 고려 했을때 반쯤은 의도했던 거지만요.
모닥불을 지나가면 콜라이더에 닿게 되는데 이 때 RespawnArea 뒤에 숫자를 보고 순서를 체크합니다. 현재보다 작은 숫자엔 반응하지 않습니다.
2. -바이러스-
이 게임에서 가장 자주 보게 될 애들입니다.
그리고 보스를 제외하고 터치&슬라이드 기능이 필요한 유일한 기믹이기도 하죠.(보라색만)
이 바이러스가 사실 이 게임에서 가장 지저분하게 만들어졌는데 그만큼 기획이 가장 많이 바뀐 기믹이기도 합니다.
원래는 일종의 벽 판정도 가지고 있어서 특정 오브젝트가 올라가 있기도 하고 초기 기획 중엔 닿아도 죽진 않지만 부술 수 있는 벽의 기능을 가진 녀석도 있었습니다. 그리고 실드 충전도 모닥불 지나가기가 아니라 얘를 10마리 잡아야 가능했습니다.
그래서 얘는 트리거가 켜진 콜라이더와 꺼진 콜라이더가 각각 있으며 터치엔 트리거가 반응하고 캐릭터엔 일반 콜라이더가 반응할 예정... 이었지만
결국 최종적으로는 벽 판정은 사라지고 파괴 시 애니메이션과 이펙트, 사운드 출력후 사라지는게 다인 녀석이 되었습니다.
빨간 녀석은 그마저도 무적이라 없구요.
하지만 코드엔 아직도 그 흔적이 남아 있습니다...
그리고 보라색 바이러스의 파괴 연출의 경우 애니메이션은 애니매이터 분이 만들어 주신 거지만
이런 식으로 풍선 터지는 연출은 제가 유니티 에셋인 Shader forge를 이용하여 만든겁니다. Shader forge를 처음 사용 했을때 이것저것 공부하다 적용하면 괜찮을거 같아서 적용해보고 기획자 보여줬는데 호평이어서 그대로 사용하게 되었습니다.
독 뱉는 바이러스의 경우엔 일정 간격으로 일정 거리와 시간만큼 날아가는 독을 뱉는 스크립트를 내장하고 있습니다.
근데 이게 자꾸 시간이 흐를수록 옆에 같이 있는 애들이랑 한프레임 정도씩 어긋나길래 원래 코루틴의 시간제어(Wait for second)를 써서 제어하다 FixedUpdate를 활용하여 강제 일치 시켰습니다.
오늘 기믹 분석은 여기까지 하겠습니다. 다른 것도 해야 하니까요.
아마 이 속도면 3번에 걸쳐서 글을 작성하게 될 거 같습니다.
원래는 코드 보여주면서 글을 쓰려 했는데 너무 지저분하고 복잡해서 코드를 어떻게 보여드려야 할지 모르겠네요.
개인 프로젝트는 팀프로젝트를 발판 삼아 가능한 깔끔하게 짜도록 해야겠습니다.
'Tree-sha (팀 3D) > 분석' 카테고리의 다른 글
(유니티3D)보스AI분석 (0) | 2017.12.16 |
---|---|
(유니티3D)기믹분석3(부유석, 버섯, 미끄러운 이끼) (0) | 2017.12.14 |
(유니티3D)기믹분석2(가시발판, 문, 레버, 보라색 발판) (0) | 2017.12.12 |
(유니티3D)직진 보정 (0) | 2017.12.05 |
(유니티3D)호를 그리며 가는 캐릭터 (0) | 2017.12.04 |