Actor Class(1)

groot616·2024년 3월 25일
0

언리얼5공부복습용

목록 보기
2/22
post-thumbnail

Actor는 언리얼 엔진 레벨에 배치할 수 있는 오브젝트

DrawDebugSphere

추후 다른 물체와의 충돌이 발생할 경우 관련된 시각적인 무언가가 필요할 때 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를 매크로 관련 헤더파일로 새로 만들어 사용해도 좋음.

DrawDebugLine

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);
}

DrawDebugPoint

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); \
    }

결과

0개의 댓글