본문 바로가기

개발/내일배움캠프

02/13 나만의 인터랙티브 공간 만들기(사격장)

왜 중요한가요?

 

지금까지 배운 기능들을 실제로 조합해보는 종합 과정을 통해, 기술의 이해를 자기 것으로 만드는 실전형 경험을 얻게 됩니다.
주어진 기능을 단순히 따라하기보다, 자신만의 기획으로 구성해보는 과정에서 창의력과 응용력이 함께 성장합니다.

개념 바로 알기

미니 프로젝트란?

정해진 기능을 구현하는 것이 아니라, 자신이 직접 구성한 공간에 목적을 부여하고 상호작용 요소를 설계하는 것

본인의 관심 분야(게임, 건축, 디오라마 등)에 맞춰 자유롭게 설정 가능

 

 

 

직접 구현해보기

  • 목표: 자신만의 씬을 기획하고, 캐릭터 이동 및 최소 1가지 상호작용 기능을 포함해 완성합니다.

[Step 1] 주제 설정

예시)게임 이스케이프 프롬 타르코프의 사격장 

 

1인칭 사격게임의 사격 연습장을 주제로 선택

최근 유튜브를 보다 생각나기도 했고, 언리얼 1인칭 템플릿을 사용하면 어렵지 않을것이라 예상함

[Step 2] 공간 구성

Static Mesh 또는 외부 에셋을 활용해 배경 구성

공간 구획, 동선 설계, 빛 연출 등 전체적 분위기 설정

내부에서 어두운 돔/벙커 느낌이 나도록구성

사용한 메시들은 StarterContent에 있는 메시들을 사용.

다만 천장을 이루는 메시의 생김새가 의도와 달라서 ModelingMode에서 일부분을 잘라내서 사용

오른쪽 부분에 경사진 부분이 존재하는데,

모델링 모드-Model-Plain Cut을 이용하면 메시를 자르는 등 수정이 가능하다.
다만 이는 사용한 메시에셋을 직접 수정하므로 사용전 복사후 조정하도록 해야함.

 

이를 이용해서 천장 부분 매끄럽게 구성하였음.

 

[Step 3] 캐릭터 조작 기능 포함

1인칭 템플릿을 이용해서 조작기능에 대해서는 구현되어있음.

[Step 4] 상호작용 기능 최소 1개 이상 구현

사격장의 Pop-up Target를 블루프린트로 구현,

Pop-up Target, 맞추면 넘어지고 일정시간후 다시 일어나는 목표물.

이를 구성하기위해 목표물의 몸체 메시, 색상표현을 위한 머티리얼, 적중시 넘어졌다가 다시 일어나도록 하는 블루 프린트 로직이 필요하다.

 

먼저 몸체 메시는 모델링 모드를 이용해 간단하게 제작.

1. 몸체 메시 제작하기

1. 언리얼의 모델링 모드로 진입

 

2. box와 Cylinder 오브젝트를 생성하고 적절한 모양이 되도록 위치와 크기 수정

박스 생성 예시

왼쪽 패널은 디테일패널과 비슷한 역할을 하는데

메시의 가로세로높이를 정하고 뷰포트 좌하단에서 회전을 조정할 수 있다.

 

박스를 막대형태로 수정하고, 그위에 실린더를 동그란 평면 형태로 만든 후 막대 위쪽에 두도록 한다.

위처럼 구성이 되었으면 두개 매시를 동시에 선택하고

왼쪽의 Voxel->Voxel Wrap을 선택하여 두개를 붙여버린다.

하나의 메시로 완성되었다.

 

다만 피벗(중심축)이 중앙에 위치해 있는데, 목표가 총에 맞으면 바닥을 기준으로 눕도록 해야하기 때문에 이를 수정해줄것이다.

XForm-Edit Pivot에서 BoxPositions를 Bottom으로 선택 후 Accept

 

2. 머터리얼 만들기

새 머터리얼을 생성 후 그래프를 다음처럼 생성

약간의 메탈릭 효과와 러프니스를 설정하고, 이름은 M_Color로 지정

왼쪽의 값을 생성하는방법은 Pallete에서 Constant~를 값에 맞게 선택 또는 연결 드래그 후 1234선택.

 

생성된 M_Color의 인스턴스를 생성 후 이름은M_Orenge로 하고 Color값을 오렌지색으로 수정

굳이 인스턴스를 만들어 쓰는 이유는 재활용 여지가 있기 때문.

3. 블루프린트 구성하기

BP_PopupTarget 블루프린트 생성후 스태틱 메시 "Target" 추가후 메시와 머티리얼 설정

 

Event Graph로 이동해서 로직 구성

부울변수 Fallen를 생성

넘어지는 애니메이션을 위한 Timeline을 생성

float Time Track으로 설정하고 0.2초짜리 키를 생성

 

이제 hit이벤트 발생시 로직을 구성

이벤트가 발생했을 때

조건1. BP_FirstPersonProjectile로 캐스트 시도
해당 블루프린트는 1인칭템플릿의 총알객체를 의미한다.즉 총알에 맞았다면.

조건2. 변수 Fallen변수가 False라면

이는 타겟이 넘어져있는지 확인하기위한 변수로 중복발생하지 않도록 변수를 True로 설정후 다음으로 진행한다.

타임라인을 통해 배운대로 액터가 90도 회전 = 넘어지는 애니메이션을 진행한다,

그리고 Timeline의 Direction에 따라 분기하는데,  0이면 정상 진행했다는 뜻이고 1이면 역재생을 했다는 의미이다.

그러니 0이면 Delay를 주고 Timeline의 Reverse를 호출하여 다시 일어나도록 하고

1이라면 액터가 다시 일어났으니 Fallen값을 False로 변경하고 끝낸다.

 

 

[Step 5] 프로젝트 정리

콘텐츠 폴더 구조 정리

직접 만든 에셋들은 MyContent폴더 아래에 각각 정리하였음.

 

Popup Target을 구현한 블루프린트는 blueprint로,

해당 메시는 Mesh폴더로, 머티리얼은 Material폴더로

추가로 화면 정중앙에 에임 크로스헤어를 구현한 위젯이 더 있는데 일단 UI폴더로 따로 위치해 두었다.

이름에는 반드시 어떤 에셋인지 알 수 있도록 BP_, SM_ 등을 붙이도록 한다.

 

조명 및 머티리얼 마무리

원래 구조를 만들면서 사방이 막히도록해 굉장히 어두운데,

표적이 잘 보이도록 스포트라이트를 이용해 조명을 추가해두었다.

 

조명이 있다는걸 알수있도록 적당한 메시를 같이 두면 좋을듯한데, 나중에 에셋스토어를 뒤져보는걸로.

 

결과물

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

엉성하긴한데 나름 만족스러운 결과인듯.

 

1인칭 템플릿의 총기 사운드나 총알 구현, 사격방향이 좀 맘에 안들어서 나중에 기회가있다면 이런부분을 조정해보도록 해야겟다

특히 총알이 화면 정중앙으로 나가지 않는다!

 

그리고 점수UI나 타이머 등을 추가하여 간단한 점수내기 미니게임처럼 구성하는것도 좋을듯.

 

 

만들면서 필요한 기술을 인터넷으로 찾아볼때도 있지만(이번의 경우 메시를 만들기 위한 모델링모드 사용?)

타임라인을 이용한 움직임 구성이나 액터 회전과 히트 이벤트 설정 등

여태 강의에서 배운 내용들을 돌아보게 되는 시간이었다.