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

 

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

 

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

 

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

 

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

 

찾아보니까 지오메트리에서 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 라는 변수가 있습니다.

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

http://bbagwang.com/unreal-engine/%ec%96%b8%eb%a6%ac%ec%96%bc-%eb%b2%a0%ed%85%8c%eb%9e%91%ec%9d%98-100%ea%b0%80%ec%a7%80-%ed%8c%81%ea%b3%bc-%ed%8a%b8%eb%a6%ad-%ec%a0%95%eb%a6%ac/?fbclid=IwAR3VpqepcmmzRyC4eoE_hzpJQL4x3Y3f2XMVAxE79Ekw5I8cvOSL3XOMYYk

 

언리얼 베테랑의 100가지 팁과 트릭 정리 – BBAGWANG

UE Summit 2019 UE4 Tips and Tricks. by, Chris Murphyall copyright to Chris Murphy DISCLAIMER 현 자료는 Epic Games의 Unreal Engine EVnagelist인 Chris Murphy님의 언리얼 서밋 2019 발표 자료 내용입니다. 모든 내용은 영상을 보며, 작성하였으며, 본인 개인의 공부 목적으로 간단하고 짧게 정리한 내용이라, 부정확한 정보가 존재하니 이점 유념하여 봐

bbagwang.com

 

시간이 되면 한번씩 해보고 다른 곳에 정리해보겠습니다.

 

이런거 어떻게 관리할까 했는데 역시 블로그에 링크 걸어 두고 수시로 보는게 최고인것 같아요.

'메모장 > 개발 지식' 카테고리의 다른 글

FObjectInitializer constructor fatal error c1853  (0) 2020.04.20
UE4 2개 이상의 Layered blend per bone  (1) 2019.12.20
창문 달린 벽 만드는 법  (0) 2019.08.31
샷건 탄환 구현  (0) 2019.07.29
기능 구현 - Zoom  (0) 2019.07.08

+ Recent posts