기존에는 블루프린트만을 사용하여 게임을 제작하는데에 시간을 쏟았는데, 더 구체적인 기능을 수행하거나 성능 최적화를 위해서는 c++ 을 통한 코딩이 필요하다는 것을 깨닫고, 언리얼 엔진에서 c++ 을 사용하여 개발을 진행해 보고자 하였다.

BP를 쓸지 C++을 쓸지에 대한 판단 기준으로는 속도 측면과 복잡도의 측면이 있는데, 블루프린트 실행은 C++보다 느리기 때문에 자주 해야 하는 연산이나 계산이 많이 필요한 작업에서는 C++을 사용하는 게 좋다고 한다. 또 대규모 데이터를 연산하는 경우나 비주얼(블루프린트 배치)로 처리하기 쉽지 않은 경우 C++을 사용하는 것이 불가피할 수 있다. 

사용한 언리얼 버전은 5.7이고, 3인칭 환경에서 진행하였다.

새로운 c++ 클래스를 추가하면, (임의로 캐릭터 액터로 추가하였다.)

이렇게 cpp 파일과 헤더 파일이 생성이 된다.

UPROPERTY는 해당 c++클래스를 사용하는 블루프린트의 클래스 디폴트에서 특정 변수의 값을 직접 조정할 수 있게 해준다. 유니티에서는 public을 변수 앞에 붙여주면 에디터에서 직접 값 조절이 가능했는데, 언리얼엔진에서는 UPROPERTY를 반드시 붙여주어야만 한다. 

UPROPERTY의 입력값으로 들어갈 수 있는 값으로는 아래의 내용들이 있다.

  • EditAnywhere : 블루프린트 원본과 레벨에 배치된 것 둘 다에서 프로퍼티를 편집할 수 있음.
  • VisibleAnywhere : 모든 창에서 프로퍼티가 보이는데 편집은 불가능함.
  • BlueprintReadWrite : 프로퍼티를 읽기와 쓰기 모두 가능하게 함
  • BlueprintReadOnly : 프로퍼티를 읽기만 가능하게 함.
  • Category = "A" : 해당하는 프로퍼티들은 클래스 디폴트 패널에서 A 카테고리로 묶어서 보여줌.
  • Transient : 휘발성 프로퍼티라서 저장, 로드 불가능

일단 확인을 위해서 해당 c++ 클래스를 사용하는 블루프린트 액터를 하나 만들어주었다.

MyCharacter 을 선택하고 이름을 설정해주면 된다.

만약 위 내용처럼 구성한다면 해당 클래스를 사용하는 블루프린트 액터의 에디터에서는 

이런 식으로 같은 카테고리에 묶여서 나오는 것을 확인할 수 있다.

UFUNCTION도 비슷한 맥락이다. 일반적으로 블루프린트에서 이벤트그래프를 통해 해당 블루프린트의 동작을 설계하는데, UFUNCTION을 사용한 함수들은 해당 이벤트그래프에서 불러와서 사용이 가능하다.

이런 식으로 사용하면 되는데, BlueprintCallable 키워드를 사용하면 블루프린트 그래프에서 호출 가능하게 된다. 다른 키워드들도 많이 있는데 이건 추후 다루어 보겠다. (내용이 상당히 많음.)

이때 Category를 지정하지 않으면, BP에디터에 해당 카테고리가 생겨서 함수를 꺼내 사용할 수 없다. test 카테고리를 지정하면 아래 스크린샷처럼 나올 것이다. 

여기서 UPARAM()을 사용하면 함수에서 인자를 받아서 사용 가능하다. 

이런 식으로 파라미터 부분에 UPARM(Displayname = "??") 과 변수를 넣어주면 된다. 

이걸 이용해서 테스트 용도로 UE_LOG 매크로를 사용해 인게임에서 콘솔에 로그를 출력해보도록 하겠다.

함수 내용은 이렇게 구성했다. UE_LOG를 사용하면 콘솔에 메시지를 띄울 수 있는데, 종류로는 Log, Error, Warning, Display 4가지가 있다. 

 TEXT() 부분에 원하는 내용을 넣고, %s 같은 것들을 사용해서 값을 넣어주면 출력이 가능하다. string을 출력할 때 UE_LOG는 포인터 값을 사용해서 값을 전달해 주어야 한다.

이런식으로 임의로 값을 설정하고 해당 클래스를 사용하는 액터를 배치한 뒤 게임을 실행하면 

왼쪽 마우스를 누를 때 마다 로그가 찍히는 것을 확인할 수 있다. 

+ Recent posts