본문 바로가기

볼봇의 코딩 생활/언리얼한 엔진

UE4 자이로스코프 센서 사용하기

모바일 장치에서 자이로 센서를 사용하는 방법에 대해 알아본다.

 

자이로 센서가 무슨 기능을 하는지는 대부분 알고 있겠지만, 간단하게 정리하자면

장치가 얼마나 회전했는지 감지해내는 기능이다.

 

자세한 센서의 역할이나 역사를 알고 싶으면 아래 글을 참고하자. 필자는 잘 모르니까 아래 글 참고.

자이로스코프 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

자이로스코프 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 자이로스코프(영어: gyroscope)는 위아래가 완전히 대칭인 팽이를 고리를 이용하여 팽이 축에 직각인 방향으로 만들고 다시 그것을 제2의 고리를 써서 앞의 것과

ko.wikipedia.org

 

레이싱 게임의 처럼, 키보드 입력이 아니라 핸들을 돌리듯한 조작감을 제공하기 위해서는

자이로 센서의 입력은 필수다. 그 방법에 대해 알아보려고 한다.

 

C++

PlayerController 클래스 또는 해당 인스턴스를 받아 올 수 있는 곳에서 작업한다.

 

 

GetInputMotionState() 함수를 호출해서 현재 장치의 모션 상태를 받아와야한다.

함수의 정의는 아래 그림과 같다.

 

함수를 호출 할 때, 출력으로 받을 백터 4개를 줘야 한다.

"Tilt" 가 우리가 원하는 자이로 센서의 응답값이다. (나머지 값은 잘 모르겠다. 궁금하면 하나씩 테스트 해보자.)

 

필자는 아래와 같은 코드를 Tick() 함수에 적어보았다.

void AGameController::Tick(float DeltaSeconds)
{
    Super::Tick(DeltaSeconds);

    FVector Tilt, _, __, ___;
    GetInputMotionState(Tilt, _, __, ___);

    const FRotator TiltRot = FRotator(
        Tilt.X * 57.2957795 - 90.0F,
        Tilt.Y * 57.2957795 - 90.0F,
        Tilt.Z * 57.2957795 - 90.0F
    );
}

 

응답값은 라디안으로 나온다. 따라서 라디안 값을 각도로 바꿔주는 일을 해야한다.

FMath::RadiansToDegrees() 함수를 사용해도 좋다.

 

 

안드로이드 휴대폰에서 실행해보면, 매 Tick 마다 현재 휴대폰의 각도가 출력되는것을 볼 수 있다.