필요한 개념
컴파일될 때 해당 매크로가 소속되어 있는 정보를 나타남
__FUNCTION__ : 함수 이름(현재 실행중인 함수명이 나타남)
__FILE__ : 파일의 경로(현재 소스의 파일명을 나타냄)
__LINE__ : 해당 라인(현재 소스가 실행중인 라인 나타냄)
CLog::Log(__FUNCTION__, __LINE__);
출력 로그를 보면
GameProject: Display: 10
GameProject: Display: 3.141593
GameProject: Display: Unreal GamePlay
GameProject: Display: X=990.000 Y=-1680.000 Z=50.000
GameProject: Display: P=0.000000 Y=39.999985 R=0.000000
GameProject: Display: BP_C01_Log_2Not Null
GameProject: Display: AC01_Log::BeginPlay, 37
잘 나옴
라이트 같은 것도 켜졌다 꺼졌다 하는 것도 Sin,Cos 이용
DrawDebug
- DrawDebugBox
- DrawDebugSolidBox
- DrawDebugPoint
- DrawDebugSphere
- DrawDebugCircle
- DrawDebugLine
- DrawDebugDirectionalArrow
C02_DrawDebug.h
더보기
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "C02_DrawDebug.generated.h"
UCLASS()
class UONLINE_03_CPP_API AC02_DrawDebug : public AActor
{
GENERATED_BODY()
private:
UPROPERTY(EditAnywhere, Category = "DrawDebug")
FVector InitLocation[5];
UPROPERTY(EditAnywhere, Category = "DrawDebug")
FBox Box;
UPROPERTY(EditAnywhere, Category = "DrawDebug")
FTransform Transform;
public:
AC02_DrawDebug();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
private:
FVector Location[5];
};
C02_DrawDebug.cpp
더보기
#include "C02_DrawDebug.h"
#include "Global.h"
AC02_DrawDebug::AC02_DrawDebug()
{
PrimaryActorTick.bCanEverTick = true;
// FVector::ZeroVector가 FVector(0, 0, 0)와 같다.
// 배치하는 기준으로 옮길려고(보기 편하게)
InitLocation[0] = FVector::ZeroVector;
InitLocation[1] = FVector(0, 1000, 0);
InitLocation[2] = FVector(0, 400, 0);
InitLocation[3] = FVector(0, 1600, 0);
InitLocation[4] = FVector(300, 1000, 0);
// FBox 맨 앞의 왼쪽 하단과 맨 뒤의 우측 상단의 크기를 지정해 박스를 정의
// 맨 아래 지점, 맨 뒷지점
// 밑의 경우는 크기가 앞으로 100이고 양옆으로 200이고 위, 아래로 100이됨
Box = FBox(FVector(-50, -100, -50), FVector(50, 100, 50));
Transform.SetLocation(FVector(200, 1600, 0));
}
void AC02_DrawDebug::BeginPlay()
{
Super::BeginPlay();
// 현재 위치에서 그 만큼 이동
for (int32 i = 0; i < 5; i++)
Location[i] = InitLocation[i] + GetActorLocation();
// BP와 동일
// 어느 월드에다 그릴지, 중심점 만큼 이동하란 얘기, 부피를 넣어줌, 빨간색으로그림, 유지 상태로 그림(BeginPlay에서 퍼시스턴트, BeginPlay에서는 유지성을 위해서 켜줘야함, Tick에서는 꺼줌)
//DrawDebugBox(GetWorld(), Location[0] + Box.GetCenter(), Box.GetExtent(), FColor::Red, true);
}
void AC02_DrawDebug::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// 틱에다가 그려야 이동한 위치 반영이 된다. Debug 객체도 같이 움직일 것이다.
for (int32 i = 0; i < 5; i++)
Location[i] = InitLocation[i] + GetActorLocation();
// 꽉찬 박스 생성
// 퍼시스턴트는 false를 줘서 유지시키지 않음(tick이니깐)
// GetExtent() : 부피
// Tick에 두면 매 프레임마다 그려짐
DrawDebugSolidBox(GetWorld(), Location[0] + Box.GetCenter(), Box.GetExtent(), FColor::Red);
// 사각형 점
// 3 : 점의 크기
DrawDebugPoint(GetWorld(), Location[1], 100, FColor::Red);
// Sphere
// 3 : 크기
// 4 : 얼마만큼 선을 동원해서 정교하게 그릴지(Slice와 동일) -> 정밀도
// 정밀도를 떨어트리면 각져 보임
DrawDebugSphere(GetWorld(), Location[2], 100, 50, FColor::Green);
// 원
// 4 : 정밀도
// 정밀도를 떨어트리면 각져 보임
DrawDebugCircle(GetWorld(), Location[3], 100, 60, FColor::Blue);
// 선
// 2 : 시작 지점
// 3 : 끝 지점
// 5 : 퍼시스턴트
// 6 : 시간(매 프레임마다 그리니까 시간이 의미가 없어서 -1)
// 7 : 깊이
// 8 : 두께
DrawDebugLine(GetWorld(), Location[2], Location[3], FColor::Magenta, false, -1, 0, 2);
// Sin, Cos : -1 ~ 1까지의 값이 반복되는 삼각함수 그래프
// 이걸 이용해서 반복되는 것을 만들 수 있음
FVector location = Location[1];
location.X += 100;
location.Z += 100;
// Y는 좌우
// GetTimeSeconds() : 델타타임 누적한 것과 똑 같음
// 속도는 안에다가 3 곱함
// 느려서 300 곱함
location.Y += sin(GetWorld()->GetTimeSeconds() * 3.0f) * 300.0f;
// 시간에 따라 이동(-1 ~ 1)
// Emerald : 에메랄드
DrawDebugPoint(GetWorld(), location, 100, FColor::Emerald);
// 방향이 있는 화살표를 그려줌
// 2 ~ 3번까지 4 : 화살표 꼭다리 크기, 6 : 퍼시스턴트 7 : LifeTime(매프레임이라 시간이 의미가 없다.) 8 : 깊이(0 주면 됨) 7 : 두께
DrawDebugDirectionalArrow(GetWorld(), location, Location[3], 360, FColor::Yellow, false, -1, 0, 10);
}
Global.h
더보기
...
#include "DrawDebugHelpers.h //DrawDebug 함수 모두 여기 있음
결과
'Unreal Engine 4 > C++' 카테고리의 다른 글
<Unreal C++> 14 - Component Begin & End Overlap (0) | 2022.04.07 |
---|---|
<Unreal C++> 13 - Actor Begin & End Overlap (0) | 2022.04.07 |
<Unreal C++> 11 - Debug(출력로그, 게임창) (0) | 2022.04.07 |
<Unreal C++> 10 - UAnimInstance (0) | 2022.04.07 |
<Unreal C++> 9 - PlayerInputComponent (0) | 2022.04.04 |