한 2주 동안 아무것도 못했는데 그 이유가 샷건 탄환을 구현하는데 투자했기 때문이다.

7월 중순에 시작했던 탄환 구현을 오늘에서야 완성을 하며, 방식을 공유하고자 한다.

샷건 탄환 구현에 있어서 가장 중요한 부분은 3가지이다.

 

1. 탄환이 규칙적인 모양으로 발사되지 않도록 한다.

2. 탄환이 방사형으로 퍼지면서 발사되도록 한다.

3. 엉뚱한 방향으로 탄환이 튀지 않도록 한다.

 

3번부터 설명을 하자면, 우선 탄환의 Collision을 수정하여 탄환들끼릭은 서로 부딛치지 않고 무시하고 통과되도록 하였다.

게임 내 탄환을 도탄하는 기능도 없고, 샷건은 탄환 수가 많아 크게 이질감을 느끼지 않는다.

그리고 탄환이 출발하는 Location을 수정해주었다. 

구체적으로, 내가 구현한 샷건은 20발의 탄환이 발사가 된다.

이 20발의 탄환을 5 * 4 형태로 발사가 되도록 하였다. 

탄환들끼리의 거리가 가까우면 이상한 방향으로 발사되기 때문에, 각 탄환의 index 별 위치를 조절해가며 퍼지지 않는 위치를 지정하였다.

 

여기까지 한다면 직사각형 모양으로 균등하게 발사 되는 샷건이 된다. 

그렇다면 어떻게 1번 조건을 만족 시키는가?

탄환의 위치에 랜덤 변수를 추가하였다.

각 탄환은 해당 index를 5로 나누어 그 몫을 column index로, 나머지를 row index로 가진다.

그리고 이 column index와 row index의 각각의 중심값으로부터의 차이를 구한 뒤 일정 값과 플레이어 화면 중심에서의 우측 벡터, 혹은 위 벡터를 곱하여 탄환의 위치를 지정한다.

이때, 이 일정 값을 특정 범위 안에서의 랜덤한 값을 주어 좀 더 혼잡한 위치에서부터 탄환이 출발하도록 하였다.

 

마지막으로, 각 탄환이 퍼져야 할 벡터들을 더한 뒤 Find Look at Rotation으로 해당 벡터로 변환해주는 Rotation을 구해서 Transform에 적용하면 샷건 탄환의 발사가 완성이 된다.

 

글로만 보면 이해가 잘 안가니 블루프린트 스크린샷을 첨부하겠다.

 

 

+ Recent posts