언리얼 C++ 프로젝트에서 Visual Studio 2022에서 디버그 할 시 옵션 선택으로 빌드 구성 선택할 수 있다.
빌드 문제 해결 가이드
1. 언리얼 에디터와 Visual Studio 종료
- 실행 중인 프로세스들이 빌드 파일을 잠글 수 있으므로, 모두 끄고 새로 시작하는 것이 좋습니다.
2. 프로젝트 폴더에서 Intermediate, DerivedDataCache, Saved 폴더 삭제
- 이 폴더들은 빌드 캐시 및 임시 데이터를 담고 있습니다.
- 삭제 후 다시 빌드하면 새로 생성되어, 잘못된 캐시로 인한 오류를 해결할 수 있습니다.
3. .uproject 파일을 우클릭 → “Generate Visual Studio project files”
- 솔루션(.sln) 파일과 프로젝트 설정을 재생성하여, 누락되었거나 꼬인 구성을 복구합니다.
4. Visual Studio에서 클린 빌드 수행
- 새로 생성된 솔루션 (.sln 파일)을 Visual Studio에서 열고 다음을 수행
- Build → Clean Solution으로 기존 빌드 산출물을 정리
- Build → Build Solution으로 프로젝트 재빌드
- 에러가 난다면 Output 창과 Error List를 확인해 원인을 파악하고 수정합니다.
5. 언리얼 에디터 다시 실행
- 에디터를 다시 실행해 코드 변경 사항이 반영되었는지 확인합니다.
- 여전히 문제가 해결되지 않는다면, 프로젝트 내 Saved/Logs 폴더에 있는 로그 파일을 열어 구체적인 에러 메시지를 확인하거나, 엔진 버전 및 프로젝트 설정을 점검해보세요.
void AHomework1_6::BeginPlay()
{
Super::BeginPlay();
SetActorLocation(FVector(0.0f));
SetActorRotation(FRotator(45.0f));
SetActorScale3D(FVector(2.0f));
SpeedZ = 200.0f;
RotationSpeed = 90.0f;
}
// Called every frame
void AHomework1_6::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (!FMath::IsNearlyZero(RotationSpeed)) {
AddActorLocalRotation(FRotator(RotationSpeed*DeltaTime));
}
if (!FMath::IsNearlyZero(SpeedZ)) {
SetActorLocation(GetActorLocation() + FVector(0, 0, SpeedZ * DeltaTime));
}
RunningTime += DeltaTime;
// K = 2π / 원하는_주기(초)
// 2초 주기 → sin은 기본적으로 2π가 한 주기
float TimeFactor = RunningTime * PI; // PI → 2초 주기
// -1 ~ 1
float SinValue = FMath::Sin(TimeFactor);
// 0 ~ 1로 변환
float Alpha = (SinValue + 1.f) * 0.5f;
// 스케일 보간
float CurrentScale = FMath::Lerp(MinScale, MaxScale, Alpha);
SetActorScale3D(FVector(CurrentScale));
}
AItem::AItem()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
//
// Component 설정
//Scence Component를 생성하고 루트로 설정
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
SetRootComponent(SceneRoot);
//Static MEsh Componenet를 생성하고 Scence Component에 Attatch
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComp"));
StaticMeshComp->SetupAttachment(SceneRoot);
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Chair.SM_Chair"));
if (MeshAsset.Succeeded()) {
StaticMeshComp->SetStaticMesh(MeshAsset.Object);
}
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Resources/Materials/M_Metal_Gold.M_Metal_Gold"));
if (MaterialAsset.Succeeded()) {
StaticMeshComp->SetMaterial(0,MaterialAsset.Object);
}
UE_LOG(LogSparta, Warning, TEXT("%s Constructor"), *GetName());
PrimaryActorTick.bCanEverTick = true;
RotationSpeed = 90.0f;
}
###라이플사이클 함수 정의
//라이프 사이클 함수들
virtual void PostInitializeComponents() override;
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
virtual void Destroyed() override;
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;