본문 바로가기

탄막

유니티 - 탄막 슈팅 게임을 만들자 (9) - 배경을 만들 때 필요한 것 안녕하세요! 윈디입니다. 최근 일이 바빠졌기도 하고, 만들던 게임의 방향성을 조금씩 확장 해 나가느라 한동안 포스팅을 못 했네요... 반성합니다. 단순히 따라서 만드는 게임이 아니라, 기왕에 만들거면 조금 더 다양한 기능을 만들고 싶었거든요.하지만 그걸 위해서 세부사항을 수정하는 것들은 말그대로 옵션 조절이었기 때문에 포스팅에 큰 의미가 없을 것 같아 미루고 있었는데, 그런 부분들을 아예 모아서 하나의 포스트로 올리는것도 나쁘지 않겟다는 생각이 들었습니다. 제가 최근에 고민했던 부분은 차별화에 관한 것이었습니다. 다른 탄막게임들하고 무엇을 다르게 만들고 싶은가? 일단, 제 게임의 경우에는 이전에 말씀드렸듯이 특정 조건에 따라서 이벤트가 오픈되어 엑스트라 페이지에 저장되도록 하는 기능을 구현해서 넣었지만,.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (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월의 첫 글이네요~!단순히 개발일지라기 보다는 좀더 배운 내용을 잘 정리할 수 있도록 쓰고 싶어서,며칠 전부터 구현한것들 움짤만 만들어 놓고서, 어떻게 써야 할까... 고민을 해 봤습니다.새로 배운 내용들도 물론 많지만, 사실 이전에 배웠던 것들의 응용이 개발을 하는데에 있어서 더 중요한 것 같아요. 한번 잘 배우면 계속 쓰기도 하구요. 그래서 이번에는 우선 구현해둔 것들을 보시면서, 어떤 것들이 사용되었는지 설명을 해 드린 다음, 거기에서 중요한 것들을 설명 드리는 것이 좋겠다는 생각을 했습니다.특히 이번 주는 보스나 일반 몬스터들의 패턴과 이펙트를 구현하느라 꽤 많은 시간을 썼기 때문에, 그런 '움직임'을 다루는 방법들을 설명드리게 될 것 같습니다. 첫번째 움짤은 자연스럽게.. 더보기
유니티 - 탄막 슈팅 게임을 만들자(2), 이벤트(Event)와 Delegate 의 사용 안녕하세요, 윈디입니다. 지난 시간에는 보스가 탄을 '쏘도록'만 만들었다면, 이제는 '탄 자체'가 언제 삭제될지에 대해서 생각을 해 봐야할 것 같습니다. 실제로 화면에서 사라져도, 총알은 삭제되지 않고 무한한 거리를 날아갑니다. 이것이 계속 메모리를 차지한다면, 엄청난 손해가 되겠죠. 프레임도 확 떨어질 거구요. 따라서,보스가 죽으면 총알도 사라져야 하겠죠? 어떻게 구현해야 할까요? 가장 단순하게 생각할 수 있는 것이, 게임 매니저등에서 태그로 총알들을 모두 검색하여,배열 안에 저장해서 한번에 모두 지워주는 클리어 함수를 만드는 것입니다. GameObject[] obj = GameObject.FindGameObjectsWithTag ("Bullet_E");// Bullet_E 태그를 가진 오브젝트를 모두.. 더보기