테스트용 맵을 만들면서 건물을 만드려는데 벽에 달린 창문을 만드는 방법이 고민이 되더군요.

 

처음에는 창문 기준으로 상하좌우 벽 나눠서 작은 벽을 쌓을까 싶었습니다.

 

하지만 문뜩 "큰 벽에 구멍 뚫는게 엔진에서 지원이 안될까?"라는 생각이 들더군요.

 

그래서 커뮤니티에 질문을 올렸는데 답이 바로 달리더군요.

 

"지오메트리 쓰면 구멍 뚫을 수 있습니다."

 

찾아보니까 지오메트리에서 addictive와 subtractive가 있는데, 전자는 범위 안을 채워주고, 후자는 비워주더군요.

 

그래서 큰 벽을 addictive로 만들고, 창문 크기 만큼 subtractive 지오메트리를 겹쳐놓으면 창문이 완성이 됩니다.

 

그리고 그 부분은 투명한게 아니라 아예 통과도 됩니다.

 

뭐라도 만드시는 분들 레벨 디자인 한번쯤 거치실텐데 도움이 되셨으면 좋겠습니다.

한 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에 적용하면 샷건 탄환의 발사가 완성이 된다.

 

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

 

 

UCameraComponent에서 FieldOfView 라는 변수가 있습니다.

이를 줄이면 줌을 땡기게 되고, 늘리면 줌을 놓는게 됩니다.

+ Recent posts