728x90
기본예제
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class ZS2020_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyActor();
// 에디터 표시, 읽고쓰기 가능, 카테고리설정
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")
int32 m_TotalDamage;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")
float m_DamageTimeInSeconds;
// 보기만 가능, 휘발성 변수
UPROPERTY(VisibleAnywhere, Transient, Category="Damage")
float m_DamagePerSeconds;
// 블루프린트 모드에서도 사용 가능한 함수로
UFUNCTION(BlueprintCallable, Category="Damage")
void CalculateValues();
// 블루프린트 가상 머신으로 호출
//UFUNCTION(BlueprintImplementableEvent, Category = "Damage")
//void CalledFromCpp();
// 블루프린트 가상 머신으로 호출
UFUNCTION(BlueprintNativeEvent, Category="Damage")
void CalledFromCpp();
APlayerController* GetMyPlayerControllerFromSomewhere();
protected:
// Called when the game starts or when spawned / 반대 EndPlay()
virtual void BeginPlay() override;
virtual void PostInitProperties() override;
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyActor.h"
// Sets default values
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
m_TotalDamage = 200;
m_DamageTimeInSeconds = 1.0f;
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// 생성자(AMyActor()) 이후 바로 실행됨
void AMyActor::PostInitProperties()
{
Super::PostInitProperties();
CalculateValues();
}
void AMyActor::CalculateValues()
{
m_DamagePerSeconds = m_TotalDamage / m_DamageTimeInSeconds;
}
// 에디터에서만 실행
#if WITH_EDITOR
// 에디터에서 값을 변경했을 때 들어오는 곳
void AMyActor::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
CalculateValues();
Super::PostEditChangeProperty(PropertyChangedEvent);
}
#endif
APlayerController* AMyActor::GetMyPlayerControllerFromSomewhere()
{
// 현재 UObject 인스턴스를 전부 찾습니다
for (TObjectIterator<APlayerController> It; It; ++It)
{
UObject* CurrentObject = *It;
UE_LOG(LogTemp, Log, TEXT("Found UObject named : %s"), *CurrentObject->GetName());
return *It;
}
return NULL;
}
void AMyActor::CalledFromCpp_Implementation()
{
// to doo
// 현재 UObject 인스턴스를 전부 찾습니다
for (TObjectIterator<UObject> It; It; ++It)
{
UObject* CurrentObject = *It;
UE_LOG(LogTemp, Log, TEXT("Found UObject named : %s"), *CurrentObject->GetName());
}
APlayerController* MyPC = GetMyPlayerControllerFromSomewhere();
UWorld* World = MyPC->GetWorld();
// 오브젝트 이터레이터처럼, 구체적인 클래스를 제공하여 해당 클래스
// 또는 그 파생클레스의 오브젝트만 구할 수 있
//for (TActorIterator<AEnemy> It(World); It; ++It)
{
}
}
C++ 소스 기반으로 블루프린트 생성하기
- 에디터에서 C++ 클래스 항목에서 블루프린트로 만들 클래스를 우클릭해서 블루프린트 생성을 하거나 블루프린트를 저장할 곳에서 우클릭 후 메뉴에서 기본에셋생성 > 블루프린트를 선택 후 모든 클래스 확장 버튼을 누르고 원하는 클래스 선택
블루프린트 제작
- 블루프린트를 만들고 우클릭 > 풀 블루프린트
728x90
'프로그래밍 > Unreal Engine 4' 카테고리의 다른 글
[언리얼 엔진4로 게임만들기] 시작 - 진 (0) | 2020.04.12 |
---|---|
[언리얼 엔진4로 게임만들기] 간단한 이동과 애니메이션 (0) | 2020.04.07 |
[언리얼 엔진4로 게임만들기] 시작 (0) | 2020.03.26 |
댓글