본문 바로가기
Unreal C++/C++ - History

07 C++ 기초 개념 및 기능 제작(3) / Obstacle Assault

by pp336 2024. 10. 27.

 

개발 목표

 - 장애물 경주용 기능 제작 스크립트

 - C++ 기초 개념을 조합하여 스폰된 오브젝트가 이동한 거리만큼 다시 돌아오게 하는 기능 제작

 

 

 

 


 

 

 

범위 지정 연산자(ScopeResolution Operator) - :: -

 

   - 일정거리 이상 보낸 오브젝트를 돌려보내기 위해서는 이동한 거리를 알아야한다.

   - 이동거리는 두개의 벡터 값의 Distance로 구할 수 있다.

Heather파일에서 시작 위치의 정보를 담을 구조체 FVector를 작성

 

CPP에서 시작 위치를 읽어오도록 설정 StartLocation = GetActorLocation();

 

 클래스에서 선언된 FVector StartLocation는 게임 플레이시 (StartLocation = GetActorLocation(); 액터의 위치를 찾아 클래스 인스턴스에서 현재 변수를 사용 가능하게 한다. 그것을 가능하게 하는 연산자를 범위지정 연산자(::)라 부른다.

 

 

 

::를 호출하여 클래스의 특정 인스턴스에서 함수를 가져와서 사용

 

Float DistanceMoved의 변수를 헤더에서 선언하고 CPP에서 DistanceMoved 값에 연결

 

 

첫 오브젝트의 위치에서 떨어진 거리 값이 우측에 표기되었다.

 

 

 


 

 

 

 

분기문(If Statements) - if -

 

 - 조건에 의해서 실행되는 함수 / (플랫폼이 이동된 거리 값이 일정 이상 혹은 같거나 미만)

 - Blueprint에서 이 참이거나 거짓으로 판별되는 Branch와 같은 개념

 

특정 이동 거리 MoveDistance의 변수를 선언 /

 

Float DistanceMoved는 시각적 디버깅을 위해 만들어진 변수로서 로컬 변수로 통합

 

StartLocation = CurrentLocation; 플랫폼이 초기 좌표 값을 넘어가지 않게 하는 역할

 

DistanceMoved > Movedistance시 PlatformVelocity값이 음수로 반전

 

 


 

 

 

멤버 함수(Member Function)

 - 클래스 내부에서 정의된 함수

 

 

만들어진 플랫폼 이동은 다음과 같은 버그를 발생

 

- 이유는 StartLocation = CurrentLocation

if (DistanceMoved > MoveDistance)
    {
        PlatformVelocity = -PlatformVelocity;
        StartLocation = CurrentLocation
    }

 

 

 CurrentLocation은 = GetActorlocation + PlatformVelocity * Dletatime

MovingFlatform은 액터의 현재 위치 값에서 PlatformVelocity에 지정된 수치 만큼의 초당 속도를 가지게 되고  

 

PlatformVelocity > MoveDistance를 넘기면 StartLocation = CurrentLocation 이 성립되지 않기 때문

플랫폼 이동이 정확한 수치 값을 갖기 위해서는 Actor의 로케이션 위치가 아닌 속도 화살표의 방향을 알아야한다.

 

 

 

 

PlatformVelocity라는 클래스에서 멤버 함수들이 있고, 여기서 .연산자를 통해 GetSafeNormal을 불러내었다.

 

 

 

-  .연산자를 통해 클래스에서 지정되어 있는 함수를 호출, 이러한 함수를 멤버 함수라고 표현

 

 

PlatformVeloctiy는 이동방향을 가져오는데 사용되고 있음으로 가장 나중에 업데이트 되도록 설정

 

 

 

빠른 속도로 움직이는 경우의 케이스도 해결 되었다.