본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 95.2번째 걸음-메모리 풀링의 발사체 적용 part2

by 인터넷떠돌이 2018. 10. 28.
반응형

안녕하세요?


지난번 포스팅에서 메모리 풀링을 적용 하려고 하는데, 내용이 너무 길어서 중간에 끊었습니다. 이번 포스팅에서도 모든 내용을 다 포스팅 할수는 없어서 중간에 끊겠지만, 그래도 될 수 있는한 이해하기 쉽도록 하면서 이러저러 했던 시행착오를 기록해 보도록 하겠습니다.




우선 지난번에 만든 BulletCreate.cs 스크립트의 GunFire()메소드에서 위 스크린샷처럼 for문을 삽입해 주도록 합니다. 이 for문은 메모리풀에 저장할 최대한의 발사체-이 경우에는 레이져 빔의 갯수인데, 레이져 빔의 갯수 이상은 만들어 지지 않도록 해주는 역할을 할 수 있다고 볼 수 있습니다. 다만 한번 발사 명령을 내렸을 때, 10개가 최대한도면 모두 10개 발사되는 일이 없도록 for문에서 break; 가 있는 것을 볼 수 있습니다.



그리고 나서 발사체가 발사가 된 다음 다시 메모리 풀도 되돌리기 위해=발사체를 비활성화 시키기 위해 for문을 하나 더 만들어야 하는데, 에러가 떴습니다.



처음에 제시가 된 비주얼 스튜디오의 해결책은 C# 프로젝트를 7.0 버전으로 업그레이드 하라는 것 이었습니다. 그래서 업그레이드를 실행 하였습니다.



일단 업그레이드를 합니다.




그런데 의외로 해결책은 간단하게, 바로 GunFire() 메서드 밖에서 for문을 만들려고 해서 발생하는 에러였습니다. 이를 해결하는 방법은 간단하게도 for문을 모두 GunFire()안에 들어오게 하는 방법외에는 없었습니다.



이렇게 해서 발사체가 발사되엇는데, 문제는 Collide 2D 컴포넌트가 비활성화 되었는지 여부를 체크해서, 비활성화가 되면 이를 체크해서 원래의 MemoryPool.cs에서 다시 메모리 풀로 발사체를 돌려 보내는 코드를 입력하도록 합니다. 그리고 나서 발사체가 있는 배열도 다시 초기화를 시키도록 합니다.



이제 여기까지 하는데 성공했다면, 유니티5로 돌아와서 BulletSystem이라는 프리펩을 선택하도록 합니다.



그리고 나서 일단 처음에는 Capsule Collider 2D를 추가해 주었습니다.




하지만 결국 하다하다 안 되어서 Box Collider 2D를 추가하게 되었고, 위 스크린샷에 나와 있는 아이콘을 눌러서 사이즈를 조정해 주는 단계에 들어갔습니다.



원본이 원본이다 보니 레이져가 세로 스크롤 비행기 슈팅게임에 적합하게 된 이미지인데, 일단 이에 맞춰서 상하로 길쭉한 형태의 출동 박스-Box Collider 2D를 만들어 보도록 합니다.



다만 문제는 이렇게 Box Collider 2D의 사이즈를 만들기 위해서는 그냥 프리펩에서는 작업을 할 수 없어서 프리펩을 씬뷰로 가져와서 오브젝트로 만들어야 하는데, 일단 Box Collider 2D의 사이즈가 정해지고 나면, 이후에는 인스펙트 뷰에서 Apply를 누른 다음에 유니티5의 계층뷰에 있는 총알의 게임 오브젝트르 삭제하도록 합니다.



그리고 나서 문제의 Destroy()함수가 있는 BulletMove.cs 스크립트를 찾아 가도록 합니다.



일단은 제대로 작동할 지 안할지 모르기 때문에, 기존의 Destroy()함수를 주석처리를 하도록 하고, 총알이 발사되고 나서 0.2초가 지난 다음에는 BoxCollider2D가 비활성화 되도록 코딩을 하였습니다. 이렇게 하는 것으로 일련의 과정이 끝나기는 했지만, 아직 레이져를 발사하는 작업은 시작도 하지 못했습니다. 나머지 작업에 대해서는 다음 포스팅에서 올릴 것을 약속드리며 이만 마치도록 하겠습니다.

반응형