안녕하세요 오늘은 전시간에 이어서 총알이 계속 앞으로 나가다가 벽에 맞아서 사라져서 메모리관리를 할 수 있는

구형물을 설치하고 스크립트를 작성해보겠습니다.

 

이렇게하는 이유는 총알오브젝트가 무한히 생성되고 또 사라지지도 않기 때문에 이걸 처리하지 않으면

너무나 짜증나게도 PC가 느려지는 현상을 마주할 수 있습니다.

 

자 보시면 DestroyZone이라고 만들었죠? 근데 저 옆에 보면 Scale도 스케일인데 저렇게 해야지 비행기가 왠만하면 쏘는

총알들이 DestroyZone에 닿아서 파괴되게 만들수 있습니다.

 

하지만 여기서 더 필요한건 자동으로 총알이 부딪혔을때 파괴되는 코드를 실행시켜줘야 하기때문에

바로밑에 있는 BoxCollider 안에있는 is Trigger 라는 체크박스부분에 체크를 해줍시다. 

 

그리고 추가적으로 Rigidbody 컴포넌트를 추가시켜줍니다.

자근데 여기서 IS Kinematic을 체크해줬죠?

왜냐하면

Is Kinematic을 체크할경우 충돌할 수 있는 물체임을 인정합니다.

하지만 동시에 DestroyZone부분의 오브젝트는 물리적인 행동을 하지 않도록 하는 옵션을 추가한겁니다.

 

자근데 뭔가 빠진게있죠? 전시간에 오브젝트는 만들었지만 그걸 처리해주는 기능을 구현을 하지 않았습니다.

이부분에 대해선 스크립트로 작성을해서 처리해주도록 하겠습니다.

 

Assets > 우클릭 > Create > C#Script > 이름 DestroyZone 

스크립트를 생성하겠습니다.

 

앞으로 DestroyZone = DZ라고 부르겠습니다.

그리고 너무 당연하게도 DZ오브젝트 안에 DZ관련 스크립트를 넣어줘야되는건 상식이겠죠?

 

자 DestroyZone에 들어갈 스크립트를 작성한 모습입니다

OnTriggerEnter(Collider other)로 트리거에 닿으면 Destroy하겠다 라는 의미를 담은 코드를 작성했습니다.

 

자이제 작성한후에 한번 Play 해서 총알을 삭제시키는지 확인해보겠습니다.

하지만 여기서 버그가 생깁니다.

총알이 안사라지는 버그입니다.

이렇게 총알이 안사라지 버그가 생기는 이유는 현재 공부하는 제가 생각하기에는

하나의 총알이 닿았을경우 깔끔하게 지워지는데 여러개의 총알을 연속적으로 빠르게 쐈을때는 그기능이

살짝 고장나는 안타까움이 존재합니다.

 

그래도 여기에서 멈출수는 없겠죠? 일단 대강 구현은 된거같습니다.

자그러면 상하좌우 DestroyZone을 배치하겠습니다.

자 이렇게 상하좌우 배치를 합니다. 

그리고 다음단계는 어떤거냐면 알려드리겠습니다.

현재 상하좌우 오브젝트를 동시에 잡고 Layer부분을 DestroyZone으로 바꿔서 4방향 전부다 같은 계열로 묶습니다.

그래야지 나중에 작업할때 훨씬 수월해지기 때문에 묶어논겁니다.

 

그다음 상단바

Edit > Project Settings > 좌측메뉴중 Physics 클릭 > 맨밑으로 스크롤 > DestroyZone부분 체크해제

이렇게 하게되면 DestroyZone끼리는 부딪혀도 깨지지 않습니다. 

저희가 원래 DestroyZone을 어느정도 살짝의 여유공간을 줬는데 이제는 다닥다닥 붙여도 서로 충돌처리가 일어나지

않습니다. 

저희가 DestroyZone코드를 봤을때 모든 게임오브젝트는 서로 부딪히면 파괴하라고 나와있었기 때문에 저렇게 해줘야

더이상 서로가 충돌이 일어나도 사라지지않습니다.

 

그리고 나머지 오브젝트들도 한번 Layer를 나눠서 주도록하겠습니다.

플레이어도 Layer를 만들어서 Layer에 Player를 할당합니다.

그리고 나머지 Bullet이랑 Enemy도 Layer를 할당해줄겁니다.

근데 하이어라키 오브젝트에는 Bullet이라던가 Enemy 오브젝트는 실행하기 전까지 뜨지 않습니다.

그러면 어떻게 해야지 한꺼번에 싸잡아서 같은 계열끼리 묶을 수 있을까요?

정답은 각각의 만들어놨던 프리팹파일(설계도)부분을 건들여주면됩니다.

 

 

그리고 그다음 충돌이 일어나면 안될것과 충돌이 일어나야 하는것을 다시하면 Layer Collection Matrix 부분에 수정합니다.

자 이렇게 되면 충돌한것들은 충돌하게되고. 충돌하면 안될것들은 충돌하게 되지 않는 신기한 현상이 일어납니다.

근데 저기걸 실행해보면 분명 Enemy가 서로 충돌해서 터지는장면도있지요?

그렇다면 저희는 Enemy끼리 서로 충돌하는 모습을 지우기위해서 체크박스를 해체하도록하겠습니다.

 

+ Recent posts