
학교에서 진행하는 방과 후 학교 프로그램 중에 언리얼 엔진이 있어 신청하게 되었다.
앞으로 3학년 정규 수업에 자리를 맡고 있는 언리얼 엔진을 위해서이기도 하지만, 내가 지망하는 직무 특성상 여러 엔진을 겸용해야하기 때문이기도 했다.
블루프린트를 우선적으로 배우고 그 후 코딩쪽을 배웠다.
물론 의문은 있었다.
'블루프린트가 훨씬 편한것 같은데, 왜 블루프린트를 사용하지 않고 cpp 코딩으로 하느냐?'
코드로 하는 과정이 생각보다 오래걸리고, 어려웠다. 디버깅 과정이 생각보다 복잡해서 당황스러웠다. 이 내용 그대로 선생님께 여쭤보았는데, 선생님께서는
"물론 편하긴 하지만, 구조를 짜는데 cpp가 더 좋고 블루프린트는 아직 불안정하기 때문에 오류가 생길 가능성이 크다."
라고 말씀하셨다.
유니티에서도 그랬듯이, 유지보수와 작업 편의성을 위해 구조를 잘 짜야한다는 것을 알았다.
확실히 블루프린트는 구조를 짜는 용도라기보다는 살을 붙이는 용도로 보였다.
어제 배운 내용은 EnhancedInput이었다.
언리얼은 신기하게도 에셋을 적용시키는것도 코드로 짰다, cpp구조를 짜는 것은 재미 있었지만 이해하는데 다소 시간이 걸렸다. 레퍼런스라는 주소 형태로 언리얼은 파일을 가져온다. 에디터를 시작할 때 코드를 읽어가며 찾고 넣는 과정이 있는것같다.
구조가 유니티의 InputSystem과 유사해보였다. 이용 비율이 높은 엔진들은 상호보완적인 관계라고 알고 있다. 경쟁 상대의 기술을 자신들의 엔진에도 적용시키는 모습이 보였다.
우선 InputMappingContext와 InputAction을 만들어야했다. InputAction은 하나의 입력을 추가할 때마다 같이 추가하였다. InputAction을 InputMappingContext에 연결하여 키를 정하고 코딩으로 넘어갔다.
언리얼의 코드는 생각보다 신기하고 재밌었다. cpp을 하면 header파일과 그에 맞는 class를 생성해서 코딩을 하는데, 언리얼은 이와 같았다. 엔진의 구성이 어떤식으로 될지 대강 생각해볼 수 있었다.
그래서, 일단 EnhancedInput을 설정하려면 여러가지 요소를 Include(한글로 어떻게 써야할지 모르겠다.)했다.
inputMappingContext.h
EnhancedInputSubsystems.h
EnhancedinputComponent.h
근데 놀라운 점은, 코드에서 분명히 빨간줄이 뜨는데 빌드 오류가 안난다는 것이었다.....
머릿속으로는 '분명히 빨간줄인데 왜 되는거지?' 싶었지만, 그냥 에디터가 불러오는데 시간이 걸리는 거라고 하셨다. 일주일 정도 지나면 잘 나올것이라는 말도 함께 덧붙이셨다...
그래서, EnhancedInput을 위한 header들을 모두 include하고
와 ㅋㅋ 빨간줄 없어졌다ㅋㅋㅋㅋ
쨌든 include하고 InputMappingContext를 가져오고 InputAction을 연결해주었다. 그리고 Actor의 EnhancedinputSubsystem에 IMC를 연결해주었다.
Input Action을 가져오는 과정도 재밌었다. static ConstructorHelpers라는 클래스로 오브젝트를 찾아서 넣어주는 과정이 있었는데, 원래 드래그로 하던 과정을 모두 코딩으로 하니까 새로웠다.

선언문인데 여기서 UPROPERTY는 언리얼의 리플렉션 방식 중 하나라고 한다. 원래 cpp에는 리플렉션이 없다고 알고있는데, 언리얼에서 구현해서 개발 능률에 도움을 주었다는 것이 좋았다.
그리고 내부에 키워드를 적어 이것이 어떤식으로 에디터에 보일 수 있게하고 건들이고를 알려주었다.

IMC를 가져오고, 이 와 같이 Action들도 가져왔다.

그 다음 Player의 EnhancedInputComponent를 가져와서 이벤트를 binding해주었다.
MoveRight밑부터는 그냥 별 다를거 없어서 MoveForward랑 Right만 설명해보자면.
현재 컨트롤러의 로테이트를 가져와서 Yaw값만 뽑아낸 후 그 로테이션의 전방벡터를 행렬연산하여 뽑아내었다. 행렬연산은 아직 이해를 못해서 나중에 공부해야할것같다.
Right는 여기서 축만 바꿨다. 그리고 AddMovementInput에 넣어주었다.
마우스로 돌리는 작업은 AddControllerYawInput을 썼다.
마지막으로 점프하고 끝냈다.
배운 점
Unreal Enhanced Input
코드 구조
왜 블루프린트보다 cpp을 많이 쓰는지