박하의 나날

[16] UE4 C++ 프로그래밍 입문_0

프로그래밍/Unreal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
 
UCLASS()
class AMyActor : public AActor
{
    GENERATED_BODY()
 
public:
    // 이 액터의 프로퍼티에 기본값을 설정합니다.
    AMyActor();
 
    // 매 프레임 호출됩니다.
    virtual void Tick( float DeltaSeconds ) override;
 
protected:
    // 게임 시작 또는 스폰시 호출됩니다.
    virtual void BeginPlay() override;
};
cs

*클래스 마법사

클래스를 생성하면 클래스 마법사가 BeginPlay()와 Tick()을 오버로딩하는 클래스를 생성한다.
BeginPlay() : 액터가 플레이 가능한 상태로 게임에 들어왔음을 알려주는 이벤트.
게임 플레이 로직을 초기화시키기 좋은 곳.
유니티 - Start()
Tick(): 프레임당 한번씩 호출된다.
유니티 - Update()

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
UCLASS()
class AMyActor : public AActor
{
    GENERATED_BODY()
public:
 
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")
    int32 TotalDamage;
 
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")
    float DamageTimeInSeconds;
 
    UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Transient, Category="Damage")
    float DamagePerSecond;
 
    ...
};
cs

*프로퍼티가 에디터에 보이도록 만들기

UPROPERTY() : 프로퍼티를 에디터에 노출시키는 전용 매크로

EditAnymore : 에디터에 프로퍼티를 노출시키고 편집도 가능.
VisibleAnywhere: 프로퍼티가 보이기는 하지만 에디터에서 편집은 불가능하게.

BlueprintReadWrite : 블루프린트에서 읽고 쓸수 있도록 만들기 위한 전용 파라미터.
BlueprintREadOnly: 블루프린트에서 const(상수) 취급할때 사용

BlueprintCallable : 블루프린트에서 부를수 있게

_모든 블루프린트 노출 함수는 카테고리를 분류해주어야 정상작동한다.


Transient(휘발성) 디스크에 저장되거나 로드되지않고 지속되지않는 파생값

Category : 유사 프로퍼티와 한 섹션에 나타나도록하는 카테고리 분류기능.

그외 프로퍼티 지정자(프로퍼티 사전) : https://docs.unrealengine.com/latest/KOR/Programming/UnrealArchitecture/Reference/Properties/Specifiers/index.html

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
AMyActor::AMyActor()
{
    TotalDamage = 200;
    DamageTimeInSeconds = 1.f;
}
 
AMyActor::AMyActor() :
    TotalDamage(200),
    DamageTimeInSeconds(1.f)
{
}
void AMyActor::PostInitProperties()
{
    Super::PostInitProperties();
    DamagePerSecond = TotalDamage / DamageTimeInSeconds;
}
 
#if WITH_EDITOR
void AMyActor::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
    CalculateValues();
 
    Super::PostEditChangeProperty(PropertyChangedEvent);
}
#endi
cs

 

*생성자에서 기본값 설정
프로퍼티에 기본값을 지정해 주지 않으면 자동으로 0, 포인터의 경우는 널 포인터로 지정한다.

생성자에서 프로퍼티의 기본값을 설정하는건 전형적인 c++클래스와 동일.

PostInitProperties() 콜 체인에 걸어주는 것으로 디자이너 설정 값을 기반으로 기본값을 만들 수 있다.
PostEditChangeProperty() 언리얼 에디터의 런타임 변경사항은 반영되지 않고,
에디터에서 타겟 오브젝트의 값이 변경되면 알려주는데 이때 필요하다.
에디터 전용 #ifdef 안에 있는데 실행파일 크기를 불필요하게 늘릴수 있는 여타 코드를 제거하기 위함이다.