📍 1주차 6강 ~ 7강
월드에 스폰된 직후에 딱 나타나서 위치 옮기면 됨
→ BeginPlay()에 구현해야함
void AItem::BeginPlay()
{
Super::BeginPlay();
SetActorLocation(FVector(x, y, z)); // 월드 좌표를 이동시킴
SetActorRotation(FRotator(pitch, yaw, roll)); // 회전
SetActorScale3D(FVector(x, y, z)); // 크기
// SetActorScale3D(FVector(2.0f, 2.0f, 2.0f))
// → SetActorScale3D(FVector(2.0f))
// FTransform 구조체로 한 번에 관리하기
FVector NewLocation(300.0f, 200.0f, 100.0f);
FVector NewRotation(0.0f, 90.0f, 0.0f);
FVector NewScale(2.0f);
FTransform NewTransform(NewRotation, NewLocation, NewScale);
SetActorTransform(NewTransform);
}
| 회전 종류 | ⚠️ 회전 축 | 설명 |
|---|---|---|
| Pitch | X 축 | 상하 회전: 객체가 위로/아래로 회전하는 동작. |
| Yaw | Z 축 | 좌우 회전: 객체가 좌측/우측으로 회전하는 동작. |
| Roll | Y 축 | 좌우 비틀기: 객체가 자기 자신을 중심으로 회전하는 동작. |
void AItem::BeginPlay()
{
Super::BeginPlay();
SetActorLocation(FVector(300.0f, 200.0f, 100.0f));
SetActorRotation(FRotator(0.0f, 90.0f, 0.0f));
SetActorScale3D(FVector(2.0f));
}
▶ Play

의자를 계속 회전하게 만들자
매 프레임마다 Rotation 값이 변하면 됨
→ Tick()에 구현해야함
1초마다 90도씩 회전하게 만들기 → 자전 형태 = Local
// Item.h
float RotationSpeed; // 변수 선언
// Item.cpp
// 생성자에서 초기화
AItem::AItem()
{
PrimaryActorTick.bCanEverTick = true; // Tick 켜기
RotationSpeed = 90.0f;
}
void AItem::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (!FMath::IsNearlyZero(RotationSpeed))
AddActorLocalRotation(FRotator(0.0f, RotationSpeed * DeltaTime, 0.0f));
}
Tick은 Tick 함수를 켜야만 작동 가능 → 생성자에서 적용함
PrimaryActorTick.bCanEverTick = true; // on
PrimaryActorTick.bCanEverTick = false; // off
블루프린트 - C++ 연동시켜 왔다갔다 구현 가능
// Item.h
#include "Item.generated.h" // 헤더파일 가장 아래 위치해야함
UCLASS()
// 이 클래스를 리플렉션 시스템에 등록
// → 블루프린트에서도 접근 가능해짐
class SPARTAPROJECT_API AItem : public AActor
{
GENERATED_BODY() // 리플렉션 데이터를 자동 생성하기 위해 언리얼 엔진이 사용하는 매크로
};
UCLASS() = UCLASS(Blueprintable, BlueprintType)
// 이 클래스가 블루프린트에서 상속 가능함
// BP에서 이 클래스를 변수로 선언 or 참조 가능
UCLASS(NotBlueprintable, BlueprintType) = UCLASS(BlueprintType)
// 이 클래스는 BP에서 상속 불가능
// BP에서 선언 or 참조 가능
얘를 부모로 두고 BP Class를 만든다

부모로 둬서 스태틱 메시까지 그대로 상속 받음


Item Class로 변수화
이 클래스를 BP 안에서 또 클래스로 만들어줌
| 인자 | 설명 | 클래스 디폴트 값 수정 여부 | 인스턴스 값 수정 여부 |
|---|---|---|---|
EditDefaultsOnly | 디폴트 값만 수정 가능하며, 인스턴스 값은 수정할 수 없습니다. 블루프린트에서는 기본값만 변경 가능합니다. | 수정 가능 (클래스 디폴트 값만) | 수정 불가 |
EditInstanceOnly | 인스턴스 값만 수정 가능하며, 디폴트 값은 수정할 수 없습니다. | 수정 불가 | 수정 가능 (인스턴스 값만) |
EditAnywhere | 블루프린트에서 해당 변수를 읽고 수정할 수 있습니다. 디폴트 값과 인스턴스 값 모두 수정 가능. | 수정 가능 (클래스 디폴트 값) | 수정 가능 (인스턴스 값) |
VisibleAnywhere | 해당 변수를 어디서든 읽을 수 있지만, 수정은 불가능합니다. 인스턴스 값은 수정 불가. | 수정 불가 | 수정 불가 |
BlueprintReadOnly | 블루프린트에서 변수 읽기만 가능, 디폴트 값을 수정할 수는 있지만 인스턴스 값 수정은 불가능. get ⭕, set ❌ | 수정 가능 (클래스 디폴트 값만) | 수정 불가 |
BlueprintReadWrite | 블루프린트에서 변수 읽고 쓰기 가능, 디폴트 값과 인스턴스 값 모두 수정 가능. get ⭕, set ⭕ | 수정 가능 (클래스 디폴트 값) | 수정 가능 (인스턴스 값) |
Transient | 저장되지 않음, 디폴트 값이나 인스턴스 값 모두 저장되지 않고, 저장될 수 없음. | 수정 불가 | 수정 불가 |
SaveGame | 해당 변수가 세이브 파일에 저장될 수 있도록 설정, 디폴트 값과 인스턴스 값 모두 저장됨. | 수정 가능 (클래스 디폴트 값) | 수정 가능 (인스턴스 값) |
Category="CategoryName" | 카테고리로 변수를 그룹화할 수 있도록 설정. 디폴트 값을 설정하는 것과 관련 있음. | 수정 가능 (클래스 디폴트 값만) | 수정 불가 |
meta=(ClampMin="X", ClampMax="Y") | 변수의 최소값과 최대값을 설정하여 디폴트 값에 제한을 두지만, 인스턴스 값은 수정 가능. | 수정 가능 (클래스 디폴트 값만) | 수정 가능 (인스턴스 값) |
( ) 인자 없음 : 기능을 하는 클래스와는 다르게 변수와 함수에서는 언리얼이 존재만 알고 있음UPROPERTY()
USceneComponent* SceneRoot; EditDefaultsOnly로 선언하면 블루프린트에서 수정 불가BlueprintReadWrite로 선언하면 블루프린트에서 수정 가능UPROPERTY(EditDefaultsOnly)
float Health = 100.0f; // 디폴트 값
UPROPERTY(BlueprintReadWrite)
float CurrentHealth; // 인스턴스 값
// Item.h
UCLASS()
class SPARTAPROJECT_API AItem : public AActor
{
GENERATED_BODY()
public:
AItem();
protected:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Item|Components")
USceneComponent* SceneRoot;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Item|Components")
UStaticMeshComponent* StaticMeshComp;
UPROPERTY(EditDefaultonly, BlueprintReadOnly, Category="Item|Properties")
float RotationSpeed;

USceneComponent* SceneRoot;UStaticMeshComponent* StaticMeshComp;float RotationSpeed;// Item.h
UFUNCTION(BlueprintCallable, Category="Item|Actions")
void ResetActorPosition();
UFUNCTION(BlueprintPure, Category="Item|Properties")
float GetRotationSpeed() const;
UFUNCTION(BlueprintImplementableEvent, Category="Item|Event")
void OnItemPickedUP();
BlueprintCallable 블루프린트에서 호출 가능BlueprintPure BP에서 return 값만 반환 받게 호출, 실행 핀은 없음BlueprintImplementableEvent BP에서 구현 필요, 호출은 C++에서도 가능함// Item.cpp
void AIItem::ResetActorPosition()
{
SetActorLocation(FVector::ZeroVector); // 원점 위치
}
float AIItem::GetRotationSpeed() const
{
return RotationSpeed;
}
// OnItemPickeUp() 은 구현하지 않고 BeginPlay에서 호출만

b