다양한 기록

언리얼 C++ 코딩 규칙 본문

언리얼 엔진/언리얼 엔진 - 기초

언리얼 C++ 코딩 규칙

라구넹 2024. 10. 30. 17:41

언리얼 엔진은 파스칼 케이싱이 기본

UnrealEngine O

unrealEngine X

unreal_engine X

 

각 단어의 첫번째 글자는 대문자, 언더스코어 사용 안함


타입 이름에는 추가적으로 대문자 접두사 포함

- 템플릿 클래스 T

- UObject 상속 U

- AActor 상속 A

- SWidget 상속 S

- 추상적 인터페이스 클래스 I

- 열거형 E

- 부울 변수는 b 사용 (ex. bIsActed)

- 그 외 대부분 클래스는 F 포함 (일반적인 클래스, 구조체)

 

typedef는 적합하게.. 구조체면 F 붙이고 UObject면 U 붙이고

* 특정 템플릿 인스턴스화의 typedef는 더 이상 템플릿이 아니며 다음과 같이 알맞은 접두사를 붙여야 함

typedef TArray<MyType> FArrayOfMyTypes;

- 부울을 반환하는 모든 함수는 IsVisible(), ShouldCleareBuffer() 같은 true, false 질문 필요

- 프로시저 (반환 값이 없는 함수)는 동사 뒤 오브젝트 붙여야 함 / 메서드의 오브젝트가 그 안에 있는 오브젝트는 예외

- 값을 반환하는 함수는 반환값을 설명해야 함

 

함수 파라미터가 참조로 전달되어 write될 것 같으면 이름 앞 접두사에 Out 추가

전달받아 안에서 쓰는 용도는 접두사 In


int 쓰면 안됨

int8, int32 이런 식으로 사용해야 함 (크기 보장이 안되기 때문에)

문자: TCHAR

 

표준 라이브러리 안씀 (일단 지금은)


Const 정확도

변경 안되는 변수는 최대한 Const 해줘야 함

레퍼런스는 자체로 const니 별 의미는 없음

 

const 배열 반환 => 별로

const 배열 레퍼런스 반환 => 좋음

const 배열 포인터 반환 => 좋음  

const 배열 const 포인터 반환 => 별로

 

overrde, final 사용하기

 

nullptr 사용하기 (NULL 절대 안됨)

 

최대한 auto 쓰지 않기

사용 가능한 경우

- 변수에 람다 바인딩

- 이터레이터 변수에서 타입이 장황함

- 템플릿 코드에서 표현식의 타입을 쉽게 식별할 수 없는 경우

 

audo 쓸 거면 const, &, * 정확히 사용해야 함


범위 기반 for

for(TPair<FString, int32>& Kvp : MyMap)
{
    ~~
}

 

열거형

UENUM()
enum class EThing : uint8
{
    a,
    b
}

 

std::move 대신 MoveTemp 사용 가능

 

생성자에서 초기화하기

 

중괄호

func
{

}

이게 표준

 

탭 사용하기

파일 이름엔 접두사 빼기

헤더는 pragma once

include는 다 들고 와서 안쓰는 건 빼야 함

스트링 리터럴 TEXT() 매크로 쓰기

긴 조건 변수에 담기

ptr* p 처럼 쓰기

 

헤더에서 스태틱 변수 선언하지 않기 (참조하는 모슨 인스턴스가 컴파일됨)

// SomeMoudle.h
extern SOMEMODULE_AOI const FString GUsefulNamedStirng

// SomeModule.cpp
const FString GUsefulNamedStirng = TEXT("String")

외부에 있다고 알려는 주고 구현은 cpp에서

 

API 디자인 가이드

bool 함수 파라미터는 피하고, 플래그는 특히 더..

열거형으로 전달하게 해야 함

이때 비트 플래그 사용 가능

 

인터페이스로 쓸 거면 멤버 변수 넣지 말기

 

override 써주기