핵심을 바로 얘기해보자면, 게임 프로그래밍은 소비자의 입장이 우선이기에 안정성과 성능 중에서 성능을 더 우선한다.
그래서 저수준의 언어로 컴퓨터의 하드웨어에 접근이 가능한 c++언어가 주로 사용되는 것이다.
언리얼 엔진은 성능을 중시할수있는 c++언어를 쓰면서, 안정성도 챙길수 있도록 틀을 만들었기 때문에
언리얼 엔진이 설계한 새로운 시스템의 단위인 언리얼 오브젝트의 사용법을 우리가 배워야한다.
언리얼은 c++기반이긴 해서 일반 c++오브젝트는 F접두사를 사용하고, 언리얼용 오브젝트는 접두사 U를 사용한다.
다음은 언리얼이 재정의한 FString 사용법의 일부다.
Tip.언리얼에서 한글 출력시
File → Save ---.cpp As → Save 옆을 누르면 Save with Encoding 에서 이미 있는데 변경하기 클릭해주고
→ UTF-8로 변경하면 정상출력된다.
언리얼 오브젝트
언리얼 공식 문서에서의 정의는 "언리얼 프로퍼티 시스템 (리플렉션)" 이다.
1) 프로그램이 실행시간에 자기자신을 조사하는 기능
2) 옵션적으로 설정이 가능
3) 모든 언리얼 오브젝트는 클래스 정보와 함께 함
참고로, 클래스 기본 오브젝트는 줄여서 CDO(Class Default Object)라 부른다.
CDO를 수정하는, 즉, 클래스의 생성자안에서 값을 변경할땐, cpp파일만 변경한거더라도, 헤더파일을 수정했을때처럼 에디터를 끄고 컴파일해야한다.
UObject 기반 클래스에서 UCLASS() 매크로를 사용하고 UPROPERTY() 매크로를 붙인 멤버변수는 이 리플렉션 시스템에 의해 기본값으로 자동 초기화가 된다.
이런 일을 해주는 코드가 정의된 곳이
바로 여기다.
우리가 c++클래스를 생성할때마다 자동으로 include된다.
여기서 중요한것은, 내가 클래스의 헤더에서 다른 참조해야하는 헤더파일을 추가할 때 .generated.h 가 가장 아래에 있도록 유지해야한다.
cpp파일에서는 내 클래스 헤더파일이 가장 위에 있도록 유지해야한다.
그래서 뭘 해볼거냐면, Person을 상속받은 Teacher,Student클래스를 만들어서, 오브젝트의 리플렉션 시스템을 이용해볼 것이다.
리플렉션을 이용한 변수 설정
이걸 사용하려고 우리가 헤더의 클래스에서 멤버변수를 선언해줄때
이렇게 UPROPERTY()를 옵션적으로 매크로 사용을 한것이다.
실행결과는 다음과 같다.
참고로, 여러번 실행 시켜서 OutPut Log창을 깔끔하게 하고싶을땐 우클릭해서 Clear Log를 해주면 이전 실행값이 안보여서 보기가 좋아진다.
리플렉션을 이용한 함수 설정
Student는 기존에 익숙히 쓰던 사용법으로 함수를 호출했다.
Teacher의 DoLesson은 리플렉션을 이용해서 함수를 호출한 형태다.
출력값은 아래와 같다.
정리해보겠다.
리플렉션 시스템이란.
1. 언리얼 오브젝트의 특정 속성과 함수를 이름으로 검색 가능.
2. 접근 지시자 (private, protected, public)와 무관하게 조작 가능하다
(즉, private 변수라도 UPROPERTY()로 선언되어 있으면 런타임에 강제로 값을 바꿀 수 있다.)
3. 언리얼 오브젝트의 함수호출 가능.
'언리얼' 카테고리의 다른 글
이득우의 언리얼 프로그래밍 6 - 델리게이트 (0) | 2025.04.21 |
---|---|
이득우의 언리얼 프로그래밍 5 - 컴포지션 (0) | 2025.04.21 |
이득우의 언리얼 프로그래밍 4 - 인터페이스 (0) | 2025.04.17 |
이득우의 언리얼 프로그래밍 2 - 언리얼 코딩표준 (0) | 2025.04.08 |
이득우의 언리얼 프로그래밍 1 - 기초 사용법 (0) | 2025.04.08 |