본문 바로가기

bullet

유니티 - 탄막 슈팅 게임을 만들자 (6), 충돌, 그 불필요한 연산을 삭제하기. 연출을 사용하자! 안녕하세요! 윈디입니다.지난 시간에는 프레임 드랍을 해결하기 위해 프로파일러를 확인하고 문제점을 찾아서 해결하는 법을 공부해 보았는데요, 며칠 더 코드를 다듬다 보니, 이런 방법도 있다! 라는 것을 생각해 내서 새로이 포스트를 작성하게 되었습니다! 이 방법은 생각보다는 적용범위가 제한적인 방법이기에, 일반적인 방법이라기 보다는, 게임을 만드시다가 사용할 수 있는 꿀팁 정도로 생각하시면 될 거 같아요! 지난번에 사용했던 아이템 흡수를 예로 들어 볼게요. 충돌시간을 분산시킴으로서 어느정도 문제를 해결하는 듯 했으나.. 몇몇 상황에서는 (플레이어의 위치에 따라)아이템끼리 많이 겹칠 경우에 렉이 나게 되더라구요. 그래서 새로운 해결책을 생각해 보는 와중에 생각이 떠올랐습니다.일단 유저들이 게임 안에서 보는 것은.. 더보기
유니티 - 탄막 슈팅 게임을 만들자 (5), 프레임 드랍을 해결하기. 안녕하세요, 윈디입니다. 지난번에 탄 삭제를 하도록 만들때, 이벤트와 델리게이트를 사용해서 탄을 삭제하는 방법을 사용해서 탄을 한번에 삭제를 했었는데요,그 이후 저는, 탄을 삭제하고 아이템으로 변한 탄들이 플레이어에게 점수로 들어가는 식으로 구현을 했었습니다.이렇게 탄을 한 프레임에 모두 삭제를 하다보니까, 순간적으로 렉이 발생하더라구요.이 렉을 해결하기 위해서는 당연히 정확한 원인을 파악해야겠죠?유니티의 프로파일러를 돌려서 확인해 보았습니다. 프로파일러는 유니티의 Windows 메뉴에서 확인하실 수 있습니다. 단축키는 컨트롤+7 입니다.프로파일러를 킨 상태로 게임을 실행하면 자동으로 Cpu 사용량이 기록이 됩니다.그래서 보스를 죽이는 시점을 확인해 봤더니..이렇게 나왔습니다. 토탈 64퍼센트나 차지하는.. 더보기
유니티 - 탄막 슈팅 게임을 만들자(2), 이벤트(Event)와 Delegate 의 사용 안녕하세요, 윈디입니다. 지난 시간에는 보스가 탄을 '쏘도록'만 만들었다면, 이제는 '탄 자체'가 언제 삭제될지에 대해서 생각을 해 봐야할 것 같습니다. 실제로 화면에서 사라져도, 총알은 삭제되지 않고 무한한 거리를 날아갑니다. 이것이 계속 메모리를 차지한다면, 엄청난 손해가 되겠죠. 프레임도 확 떨어질 거구요. 따라서,보스가 죽으면 총알도 사라져야 하겠죠? 어떻게 구현해야 할까요? 가장 단순하게 생각할 수 있는 것이, 게임 매니저등에서 태그로 총알들을 모두 검색하여,배열 안에 저장해서 한번에 모두 지워주는 클리어 함수를 만드는 것입니다. GameObject[] obj = GameObject.FindGameObjectsWithTag ("Bullet_E");// Bullet_E 태그를 가진 오브젝트를 모두.. 더보기
유니티 - 탄막 슈팅 게임을 만들자(1), Sin(),Cos()과 Mathf 의 사용 안녕하세요, 윈디입니다!오늘은 처음으로 보스가 탄막을 뿜어내도록 만들었습니다.지난번의 보스 패턴 구현에서 연장선상이 되겠네요. 이러한 탄막을 구하기 위해, 구현해야 하는 두 가지의 파트를 먼저 살펴보겠습니다. 첫번째는, 탄막을 '쏘는' 보스에서 구현해야 할 부분. 두번째는, 탄 자체가 움직이거나, 혹은 시야 범위에서 사라진 탄이 삭제되기 위해 필요한'탄' 내부에서 구현해야 하는 부분이 있겠습니다. 탄을 쏘는 보스의 부분부터 살펴보도록 하지요.탄을 원하는 방식대로 쏘도록 코루틴을 만들어서, 원하는 타이밍에 실행해줄 수 있도록 하면 되니까요.저는 시작하는 시점에 저런 탄을 생성할 수 있도록, SpellStart() 코루틴을 만들었습니다. IEnumerator SpellStart() { float angle .. 더보기