본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-24

멤버 함수

코드를 더욱 알아보기 쉽게 정리하기 위하여 우리가 직접 함수를 만들어 줄 수  있다.

이러한 함수는 헤더에서 선언하며, cpp에서 구현을 하게된다.

 

선언을 하기에 앞서서 헤더 파일을 보면 public:, protected: 이 적혀있는 것을 볼 수 있다.

이러한 것들을 접근지정자라고 하며, 해당 접근지정자 아래에 적힌 내용들이 접근할 수 있는 권한을 나타낸다.

public은 어디서든 접근이 가능하고, protected는 현재 클래스에 대해 상속받는 클래스에 한해서 접근이 가능하다.

추가로 private: 또한 존재하며, 이 경우 현재 클래스에서만 접근이 가능하다.

 

우리가 만든 기능들은 현재 클래스에서만 필요한 기능이므로, private: 로 옮겨준다.

지금 추가로 만들 함수또한 마찬가지이다.

private 선언

 

이제 우리가 플랫폼을 옮기는 과정에 대해 따로 함수로 만들어주고자 한다.

위에서 적었듯이 private: 에 선언해준다.

이때 함수 이름 앞에 void를 적어주는데, 이는 반환 타입이 없다는 것을 의미한다.

만약 int 값을 반환하는 함수라면 void가 아닌 int를 적게 된다.

 

이제 구현을 해줄 차례이다.

간단하게 Tick에서 구현했던 플랫폼이 움직이는 과정을 전부 해당 함수로 옮겨주면 된다.

구현해줄 때 해당 함수가 현재 클래스에 속한다는 것을 알리기 위해 범위지정 연산자를 작성해줄 필요가 있다.

 

하지만 여기서 문제점이 있다.

기존 Tick 함수에서 매개변수 DeltaTime을 사용했는데, MovePlatform에는 해당 변수가 존재하지 않기 때문이다.

이를 위해서 선언부 및 구현부에 해당 변수를 추가해줄 필요가 있다.

함수가 실행하는 위치는 Tick 함수이므로 해당 함수에서 우리가 필요한 매개변수 DeltaTime을 인수로 전달받는다.

 

이제 테스트 용도로 함수를 하나 더 작성해준다.

함수 이름은 RotatePlatform이며, 실제로 회전하고 있지는 않지만 액터 이름을 얻어서 해당 액터가 회전하고 있음을 로그메시지로 출력하는 기능을 갖게 된다.

선언부는 MovePlatform때와 동일하게 선언해준다.

구현도 거의 동일하지만 다른 부분이 한 부분 존재한다.

바로 인수를 받는 부분의 이름이 DT로 기존의 DeltaTime과 다른 것이다.

이처럼 받는 인수와 이름이 꼭 같을 필요는 없다.

하지만 사용목적이 기존 인수의 이름과 같고 다른 사람이 파악하기 쉽도록 하기 위해서 같게 해주는 것이 좋을 때가 많다.

 

이제 컴파일을 해보면 플랫폼도 정상적으로 움직이고, 출력로그에 로그메시지도 제대로 뜨는 것을 볼 수 있다.