Actor는 언리얼 엔진 레벨에 배치할 수 있는 오브젝트
추후 다른 물체와의 충돌이 발생할 경우 관련된 시각적인 무언가가 필요할 때 Line과 Point등을 함께 사용가능.
Blueprint에서 DrawDebugSphere사용법
- Center
DebugSphere의 Center 좌표를 지정함.
좌표를 지정해주기 위해서 GetActorLocation node를 이용(지정해주지 않을 경우 World의 중심에 생성).- Radius
DebugSphere의 반지름- Segment
구체의 Segment수. 높을수록 구에 가까워짐- Line Color
Line 색 지정- Duration
DebugSphere의 생명주기- Thickness
선의 두꺼움 정도
C++에서 DrawDebugSphere 사용법
c++에서 DrawDebugSphere를 사용하기 위해서 "DrawDebugHelpers.h" 을 포함해야 함.
#include "DrawDebugHelpers.h" ... /** Actor명 = Item */ void AItem::BeginPlay() { ... UWorld* World = GetWorld(); if(World) { FVector ActorLocation = GetActorLocation(); /* * DrawDebugSphere(const UWorld* InWorld, const FVector &Center, float Radius, * int32 Segments, const FColor &Color, bool bPersistentLines = false, * float LifeTime = (-1.F), uint8 DepthPriority = (uint8)0U, float Tickness = 0.0F)) */ DrawDebugSphere(World, ActorLocation, 25.f, 24, FColor::Red, false, 30.f); ... } }
아래는 #define을 통해 함수매크로를 이용하여 간소화한 코드
// macro를 이용한 코드간소화 #define DRAW_SPHERE(Location) if(GetWorld()) DrawDebugSphere(GetWorld(), Location, 25.f, 24, FColor::Red, true) ... void AItem::BeginPlay() { ... FVector ActorLocation = GetActorLocation(); DRAW_SPHERE(ActorLocation); }
- const UWorld* InWorld
DebugSphere를 그릴 World.- const FVector &Center
DebugSphere를 그릴 위치, 기본적으로 world의 center로 설정되어 있음.- float Radius
DebugSpehre의 반지름- int32 Segments
DebugSphere의 Segment 설정 가능- const FColor &Color
DebugSphere의 색- bool bPersistentLines = false
DebugSphere를 유지할 것인지에 대한 bool값, 기본적으로 false로 설정되어 있음.- float LifeTime = (-1.f)
bPersistentLines가 false인 경우 DebugSphere의 생명주기, 기본적으로 -1.f로 설정되어 있음.- uint8 DepthPriority = (uint8)0U
시각적 효과의 우선순위도를 나타낸다. 값이 작을수록 DrawDebugSphere가 다른 오브젝트 앞에 렌더링됨.- float Tickness = 0.0F
DebugSphere의 선의 두께를 나타낸다.
성능 향상을 위해 macro를 매크로 관련 헤더파일로 새로 만들어 사용해도 좋음.
Blueprint에서 DrawDebugLine사용법
- Line Start
DebugLine의 시작지점(지정해주지 않을 경우 World의 중심)- Line End
DebugLine의 끝지점- GetActorForwardVector
Actor의 전방방향의 unit vector를 반환한다.
시작지점과 끝지점은 각각 World의 중심 기준 vector이므로 vector간 합을 이용해 LineEnd지점을 구한다.
C++에서 DrawDebugLine 사용법
c++에서 DrawDebugLine를 사용하기 위해서 "DrawDebugHelpers.h" 을 포함해야 함.
#include "DrawDebugHelpers.h" ... /** Actor명 = Item */ void AItem::BeginPlay() { ... UWorld* World = GetWorld(); FVector ActorLocation = GetActorLocation(); FVector Forward = GetActorForwardLocation(); if(World) { /* * DrawDebugLine(const UWorld* InWorld, const FVector &LineStart, const FVector &LIneEnd, * const FColor &Color, bool bPersistentLines = false, float LifeTime = (-1.F), * uint8 DepthPriority = (uint8)0U, float Tickness = 0.0F) */ DrawDebugLine(World, ActorLocation, ActorLocaiton + Fowrad * 100.f, FColor::Red, true, -1.f, 0, 1.f); ... } }
아래는 #define을 통해 함수매크로를 이용하여 간소화한 코드
// macro를 이용한 코드간소화 #define DRAW_LINE(StartLocation, EndLocation) if(GetWorld()) DrawDebugLine(StartLocation, EndLocation, FColor::Red, true, -1.f, 0, 1.f); ... void AItem::BeginPlay() { ... FVector ActorLocation = GetActorLocation(); FVector EndLocation = GetActorForwardLocation(); DRAW_LINE(ActorLocation, EndLocation * 100.f); }
Blueprint에서 DrawDebugPoint 사용법
- Position
DebugPoint를 표시할 위치- Size
DebugPoint의 크키- Point Color
DebugPoint의 색- Duration
DebugPoint의 생명주기
C++에서 DrawDebugPoint 사용법
#include "DrawDebugHelpers.h" ... /** Actor명 = Item */ void AItem::BeginPlay() { ... UWorld* World = GetWorld(); FVector ActorLocation = GetActorLocation(); FVector Forward = GetActorForwardLocation(); if(World) { /* * DrawDebugPoint(const UWorld* InWorld, const FVector &Position, float size, const FColor &PointColor, * bool bPersistentLines = false, float LifeTime = (-1.F), uint8 DepthPriority = (uint8)0U) */ DrawDebugPoint(World, ActorLocation + Forward * 100.f, 30.f, FColor::Red, true); ... } }
아래는 #define을 통해 함수매크로를 이용하여 간소화한 코드
// macro를 이용한 코드간소화 #define DRAW_POINT(Location)) if(GetWorld()) DrawDebugPoint(GetWorld(), Location, 30.f, FColor::Red, true); ... void AItem::BeginPlay() { ... FVector ActorLocation = GetActorLocation(); FVector EndLocation = GetActorForwardLocation(); DRAW_POINT(ActorLocation + EndLocation * 100.f); }
위의 매크로들을 활용해 DebugSphere를 제외한 ForwardVector만 표현하는 매크로도 만들 수 있음.
#define DRAW_VECTOR(StartLocation, EndLocation) if(GetWorld()) \ { \ DrawDebugLine(StartLocation, EndLocation, FColor::Red, true, -1.f, 0, 1.f); \ DrawDebugPoint(GetWorld(), EndLocation, 30.f, FColor::Red, true); \ }
결과