언리얼 엔진 공부 시작!
스파르타 코딩클럽 - 내일배움캠프 - 언리얼 엔진 게임 개발
스파르타 코딩클럽에서 제공하는 내일배움캠프의 언리얼 엔진을 사용한 게임 개발 트랙에 참여하게 되었다. 학부 때 Computer Science 전공으로 수업을 듣고 과제를 했던 것 외에는 개발 경험이 없기에 처음부터 시작하는 마음으로 분발해야겠다. 블로그 글 형식으로 새로 배우는 내용 위주로 정리하는 습관을 들이고자 한다.

게임 개발 요소
- 기획
- 그래픽
- 프로그래밍 : 오디오 시스템, 입력 시스템, 그래픽 표현
게임 엔진 Game Engine
- 그래픽, 사운드, 물리 엔진, AI 기능, 네트워킹 등 게임의 다양한 요소를 하나의 엔진에서 개발할 수 있는 기능을 기본으로 탑재하고 있어 프로그래밍을 더 용이하게 해주는 도구이다.
- 언리얼 개발자 커뮤니티(Epic Developer Community Forums)를 활용해 질문에 답을 받거나 개발 중인 내용에 대한 피드백을 받을 수 있다. (+ StackOverflow)
- 공식 문서, 유튜브 강좌, 블로그 포스트 등 레퍼런스와 튜토리얼이 많이 있다.
- 자체 게임 엔진을 개발하는 회사도 있지만 개발 및 유지보수에 많은 시간, 비용, 인력이 필요해 많이 줄어들었다.
언리얼 엔진 Unreal Engine
- vs. 유니티
언리얼 엔진: 대규모 혹은 고사양 3D 게임에 적합하다. 신기술의 도입이 빠르다. 대형 회사 채용 시 자격사항인 경우가 많다.
유니티: 간단한 프로젝트나 2D 프로젝트 제작에 적합하다.
- 블루프린트 노드
프로그래밍 언어 대신 '노드'라는 블록과 같은 요소들을 구성함으로써 게임을 완성하는 것까지 가능한 비주얼 스크립팅 방식이다. 다만 프로그래밍 언어를 사용하는 것보다 구조가 복잡해지거나 최적화가 부족하다.
- 언리얼 엔진에서 공개한 소스 코드 (버전 5.5) - GitHub 계정 연동만 해놓았다. 나중에 조금 더 익숙해지면 살펴보려 한다.
- 공식 도큐멘테이션 - 어떤 내용이 있는지 대략의 목차를 살펴보았고, 인터페이스와 기초 용어를 살펴보았다.
블루프린트 기초 강의 수강
1~2주차 - 블루프린트 둘러보기 / 액터 구현해보기
- 변수 - 이름과 자료형 선언, Get / Set 으로 변수 값을 불러오거나 변수 값 설정
- 매크로 - 입력값을 받아 연산 등 처리하여 특정 값 출력
- Flow Control: Sequence, Branch (= if / else), While Loop, For Loop (+ with break), For Each Loop (배열 iterate)
- 클래스 / 상속 / 서브클래스
- Actor - Pawn (빙의 Possess) - Character 직계
- 1. 3D 모델 / 2. 머티리얼 / 3. 라이팅 컴포넌트
- 스켈레탈 메시: 스태틱 메시와 달리 애니메이션에 따라 변형되는 메시
- 블루프린트 그래프 - 메시 컴포넌트 추가, 머티리얼 적용
- 머티리얼 그래프 - Texture Sample 노드 이용해 텍스쳐(이미지 등)를 베이스컬러로 적용
- 라이트 컴포넌트 - Point Light
- 스프링 암 - 액터에 충돌체 부착 (보통 카메라 컴포넌트) - 기본 거리 유지하며 액터를 따라가고, 이동 중 다른 오브젝트 충돌 시 충돌하지 않을 만큼으로 거리가 좁혀는(?) 스프링 같은 컴포넌트인가보다...
- 이벤트 그래프 - 실행 시 (BeginPlay) 와 매 프레임 (Tick) 마다 노드 호출
- 블루프린트 그래프 - Event Tick 에서 Delta Seconds 값을 이용한 Location (벡터 연산, Sin(degrees) 사용), Rotation, Scale 변경
3주차 - 캐릭터 구현하기
- 스켈레톤 에셋 : 뼈대 구조 / 피직스 에셋 : 충돌체 범위
- 캐릭터 추가 - 자손 블루프린트 클래스 생성
- 스켈레톤 메시 (+ 컴파일), 머티리얼 적용
- Location, Rotation, Scale 조정
- 스프링 암, 카메라 컴포넌트 추가
BeginPlay 설정
- 입력을 받기 위해서 Player Controller 빙의
- 인풋 매핑 컨텍스트 추가
- 카메라 활성화
Input Action 입력 액션 (IA_xxx)
>> 일시정지 시 트리거 : 게임 일시정지되었을 때 동작할지 결정
>> 값 타입 (제일 중요)
- Digital : 예를 들어 눌렸는지 안눌렸는지
- Axis1D : 가속. 후진 등 1/-1 값
- Axis2D or 3D : 2 혹은 3개의 축 float vector
>> 트리거 설정
Jump 구현
- IA_Jump 값 타입 : 스페이스 바 눌림/안눌림이므로 Digital(bool) / 트리거 : '눌림' (Pressed)
- Input Mapping Context 입력 매핑 컨텍스트에서 생성한 IA를 키 입력에 매핑 (IMC_xxx)
>> 입력 액션에 키보드 키 등 매핑
>> 여기에서도 트리거 추가 가능
- 이벤트그래프
>> 인풋 액션을 노드로 불러와 Jump 노드 연결
>> Get EnhancedInputLocalPlayerSubsystem - Add Mapping Context (*정확한 이해를 위해 추가로 찾아봐야겠다.)
Move 구현
- IA_Move 값 타입 : Axis2D (전후좌우) / 트리거 : '다운' (press and hold)
- 인풋 매핑 컨텍스트에서 IA_Move를 모디파이어 활용해 여러 가지 키 입력에 매핑
*모디파이어 : 하나의 입력 값을 여러가지로 변환
- W : x축 + --> 입력 값 그대로 사용 (= None)
- S : x축 - --> 부정 (Negate = 입력 값 반대로)
- A : y축 - --> 부정 & 스위즐 입력 축 값 (다른 축 전환 & 반대로)
- D : y축 + --> 스위즐 입력 축 값 (다른 축 전환)
- 이벤트그래프
>> 캐릭터 무브먼트 컴포넌트 - Add Input Vector
>> 2D vector 이기 때문에 X, Y로 break vector 2D
>> 인풋 벡터의 X값 (WA ~ 전후 ~ +-)과 액터의 현재 앞방향 벡터를 곱
>> 인풋 벡터의 Y값 (DS ~ 좌우 ~ +-)과 액터의 현재 우측방향 벡터를 곱
* 왜? 인풋액션에서 받은 벡터는 절대적인(월드의) XY 축 기준의 방향을 가리키므로 현재 액터의 방향과 곱해 현재 액터 기준의 전후 / 좌우를 가리키게 한다.
>> 두 곱한 벡터를 더해 최종적인 무브먼트 벡터로 만들기 --> Add Input Vector에 피입력한다.
Look 구현 (마우스 이동에 따라 시점 회전)
- IA_Look 생성 후 인풋 매핑 컨텍스트에서 '마우스 XY 2D 축'에 매핑 *별도 트리거 없음. 당연히.
- 이벤트그래프
>> Action Value 의 x 값 (좌우) 은 z 축 기준 회전 (= yaw) --> Add Controller Yaw Input
y 값 (상하) 은 multiply by -1 & x 축 기준 회전 (= pitch) --> Add Controller Pitch Input
- 스프링 암 - 디테일 - 폰 제어 회전 사용 체크
- 뷰포트에서 캐릭터 선택 --> 디테일에서 컨트롤러 요 회전 사용만 체크 (피치, 롤은 카메라만 회전하고 캐릭터컨트롤러는 회전하지 않아야하기 때문)
'언리얼_엔진_게임개발_공부 > 언리얼 블루프린트' 카테고리의 다른 글
[언리얼/블루프린트] 플레이어 캐릭터 클래스 (0) | 2024.12.19 |
---|---|
[언리얼/블루프린트] 애니메이션 & 사운드 - 강의 메모 (1) | 2024.12.18 |
[언리얼/블루프린트] 구구단, 슈팅 게임, 가위바위보 로직 구현 (1) | 2024.12.18 |
[언리얼/블루프린트] 레벨 디자인 맛보기 - Sky Atmosphere Component / Raleigh & Mie Scattering / 머티리얼 그래프 (0) | 2024.12.17 |
[언리얼/블루프린트] Enhanced Input 향상된 입력 (2) | 2024.12.16 |