본문 바로가기

탄막게임

유니티 - 탄막 슈팅 게임을 만들자 (9) - 배경을 만들 때 필요한 것 안녕하세요! 윈디입니다. 최근 일이 바빠졌기도 하고, 만들던 게임의 방향성을 조금씩 확장 해 나가느라 한동안 포스팅을 못 했네요... 반성합니다. 단순히 따라서 만드는 게임이 아니라, 기왕에 만들거면 조금 더 다양한 기능을 만들고 싶었거든요.하지만 그걸 위해서 세부사항을 수정하는 것들은 말그대로 옵션 조절이었기 때문에 포스팅에 큰 의미가 없을 것 같아 미루고 있었는데, 그런 부분들을 아예 모아서 하나의 포스트로 올리는것도 나쁘지 않겟다는 생각이 들었습니다. 제가 최근에 고민했던 부분은 차별화에 관한 것이었습니다. 다른 탄막게임들하고 무엇을 다르게 만들고 싶은가? 일단, 제 게임의 경우에는 이전에 말씀드렸듯이 특정 조건에 따라서 이벤트가 오픈되어 엑스트라 페이지에 저장되도록 하는 기능을 구현해서 넣었지만,.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (8) - 몬스터를 관리하는 오브젝트 풀링! 안녕하세요! 윈디입니다. 최근에는 조금씩 시간을 내서 잡몹들을 만들어서 전반적인 스테이지를 만들고 있습니다.▲스테이지 매니저 스크립트에서 이전에 설명드렸던 iTween path 를 사용하여, 잡몹들이 나올 전반적인 위치나, 패턴을 관리하고 있죠. 그런데 저 움짤을 자세히 봐 주세요. 계속해서 똑같은 몬스터들이 나오는 상황입니다.이런 상황에서 굳이 저 잡몹들의 삭제/생성을 반복할 필요가 있을까요? 차라리, 미리 10개정도의 잡몹 오브젝트를 생성해 놓고 죽을 때마다 삭제가 아니라 비활성화시켜서 필요할 때마다 재활용한다면...?이라는 생각에, 오늘은 '오브젝트 풀링'을 사용해 보았습니다. 1. 오브젝트 풀링이란? 오브젝트 풀링이란, 사용이 끝난 객체를 삭제하지 않고 저장해 두었다가, 필요할 떄가 오면 다시 사.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (7) UI 만들기 - 상태와 점수 표시 안녕하세요, 윈디입니다.한동안 휴학 준비하고, 휴학동안 할 일을 구하느라 포스팅이 좀 늦었네요 ㅜ 시간이 부족하기도 했지만 정진하지 못한 제 탓입니다!앞으로는 좀더 열심히 자기계발을 하기 위해 노력해야 할 거 같습니다. 일이 끝나면 시간이 늦어서 그런지 자꾸 딴짓을 하게 되더군요.. 그래도 어찌어찌 시간을 내서, 기본적인 틀을 완성한 탄막 게임에 UI를 입히기로 했습니다. 보통 슈팅 게임을 보면, 왼쪽이나 오른쪽에 작게, 아니면 아예 틀을 하나 만들어서 그 위에 현재 점수나, 현재 목숨, 봄 등등 여러가지 정보를표시하게 되죠. 오늘 설명드릴 부분이 바로 그런 부분인데요, 간단하다면 정말 간단하지만, 실제로 해 보는 것과 아닌 것은 큰 차이가 있더라구요. ▲탄막 게임으로 정말 유명한 게임이죠, 동방프로젝트.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (6), 충돌, 그 불필요한 연산을 삭제하기. 연출을 사용하자! 안녕하세요! 윈디입니다.지난 시간에는 프레임 드랍을 해결하기 위해 프로파일러를 확인하고 문제점을 찾아서 해결하는 법을 공부해 보았는데요, 며칠 더 코드를 다듬다 보니, 이런 방법도 있다! 라는 것을 생각해 내서 새로이 포스트를 작성하게 되었습니다! 이 방법은 생각보다는 적용범위가 제한적인 방법이기에, 일반적인 방법이라기 보다는, 게임을 만드시다가 사용할 수 있는 꿀팁 정도로 생각하시면 될 거 같아요! 지난번에 사용했던 아이템 흡수를 예로 들어 볼게요. 충돌시간을 분산시킴으로서 어느정도 문제를 해결하는 듯 했으나.. 몇몇 상황에서는 (플레이어의 위치에 따라)아이템끼리 많이 겹칠 경우에 렉이 나게 되더라구요. 그래서 새로운 해결책을 생각해 보는 와중에 생각이 떠올랐습니다.일단 유저들이 게임 안에서 보는 것은.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (5), 프레임 드랍을 해결하기. 안녕하세요, 윈디입니다. 지난번에 탄 삭제를 하도록 만들때, 이벤트와 델리게이트를 사용해서 탄을 삭제하는 방법을 사용해서 탄을 한번에 삭제를 했었는데요,그 이후 저는, 탄을 삭제하고 아이템으로 변한 탄들이 플레이어에게 점수로 들어가는 식으로 구현을 했었습니다.이렇게 탄을 한 프레임에 모두 삭제를 하다보니까, 순간적으로 렉이 발생하더라구요.이 렉을 해결하기 위해서는 당연히 정확한 원인을 파악해야겠죠?유니티의 프로파일러를 돌려서 확인해 보았습니다. 프로파일러는 유니티의 Windows 메뉴에서 확인하실 수 있습니다. 단축키는 컨트롤+7 입니다.프로파일러를 킨 상태로 게임을 실행하면 자동으로 Cpu 사용량이 기록이 됩니다.그래서 보스를 죽이는 시점을 확인해 봤더니..이렇게 나왔습니다. 토탈 64퍼센트나 차지하는.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (4), Atan을 이용해서 2D에서 lookAt 함수 기능을 구현해보자. 안녕하세요! 윈디입니다. 오늘은 유니티에서 기본으로 제공하는 함수, LookAt에 대해서 이야기를 해보려고 해요.LookAt은 사실 3D게임을 제작할때는 정말로 유용한 함수죠, 원하는 곳을 바로 볼 수 있으니까요.하지만 , 2D에서는 잘 적용이 되지 않는데요,(아무래도 z축이 2D에서는 표시되지 않지만 실제로 존재하기 때문인 것 같습니다만.)그래서 저희는 어떤 오브젝트가 위치 a로의 방향을 알아내서 직접 볼 수 있는 LookAt2D() 함수를 한번 구현해 볼 겁니다. 사실상 2D에서 저희가 다뤄야할 시계방향, 반시계방향의 각도는 유니티에서는 Z축의 각도입니다.직접 2D화면에 오브젝트를 올려서 회전해 보시면 바로 알게 되실 거에요. 그렇다면 방향은 어떻게 돌릴까요? 해당 프레임 안에 돌리려면, transf.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (3), itween 사용하기 안녕하세요! 윈디입니다. 7월의 첫 글이네요~!단순히 개발일지라기 보다는 좀더 배운 내용을 잘 정리할 수 있도록 쓰고 싶어서,며칠 전부터 구현한것들 움짤만 만들어 놓고서, 어떻게 써야 할까... 고민을 해 봤습니다.새로 배운 내용들도 물론 많지만, 사실 이전에 배웠던 것들의 응용이 개발을 하는데에 있어서 더 중요한 것 같아요. 한번 잘 배우면 계속 쓰기도 하구요. 그래서 이번에는 우선 구현해둔 것들을 보시면서, 어떤 것들이 사용되었는지 설명을 해 드린 다음, 거기에서 중요한 것들을 설명 드리는 것이 좋겠다는 생각을 했습니다.특히 이번 주는 보스나 일반 몬스터들의 패턴과 이펙트를 구현하느라 꽤 많은 시간을 썼기 때문에, 그런 '움직임'을 다루는 방법들을 설명드리게 될 것 같습니다. 첫번째 움짤은 자연스럽게.. 더보기
유니티 - 탄막 슈팅 게임을 만들자(1), Sin(),Cos()과 Mathf 의 사용 안녕하세요, 윈디입니다!오늘은 처음으로 보스가 탄막을 뿜어내도록 만들었습니다.지난번의 보스 패턴 구현에서 연장선상이 되겠네요. 이러한 탄막을 구하기 위해, 구현해야 하는 두 가지의 파트를 먼저 살펴보겠습니다. 첫번째는, 탄막을 '쏘는' 보스에서 구현해야 할 부분. 두번째는, 탄 자체가 움직이거나, 혹은 시야 범위에서 사라진 탄이 삭제되기 위해 필요한'탄' 내부에서 구현해야 하는 부분이 있겠습니다. 탄을 쏘는 보스의 부분부터 살펴보도록 하지요.탄을 원하는 방식대로 쏘도록 코루틴을 만들어서, 원하는 타이밍에 실행해줄 수 있도록 하면 되니까요.저는 시작하는 시점에 저런 탄을 생성할 수 있도록, SpellStart() 코루틴을 만들었습니다. IEnumerator SpellStart() { float angle .. 더보기
유니티 2D UI - 대화창 구현하기! - SetSiblingIndex 와 이미지 순서 유니티 수업을 들으며 혼자서 진행하고 있는 프로젝트 입니다.2D슈팅게임이 목표엿는데요, 슈팅게임을 하다 보면 당연히 대화가 필요한 시점도 나오겠죠. 그래서 오늘은 한번 대화창을 제작해 보았습니다! ▲최종 결과물이라고 생각해 주시면 되겠습니다. (Gif 파일은 이상이 없는데 올리는 과정에서 뭔가 문제가 생기는지 화면이 자꾸 깨지네요) 1. 계획 세우기 단계. 대화창을 제작하기로 결정한 후, 대화창에 넣기로 한 필요 기능들은 다음과 같았습니다. ⓐ 사용할 때 해당 판넬이 앞으로 돌아나오며 하이라이트를 받도록 조정, 대화의 대상이 되는 1개 캐릭터만 제외하고 RGB컬러를 어둡게 맞춰주는 상태 (미세값 조정 예정 : RGB전부 대략 77정도가 적절해 보임) ⓑ 캐릭터 판넬은 1 판넬당 1캐릭터의 초상화를 표시하.. 더보기