묻공러
언리얼 Pawn - Pawn 조작
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (487)
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 (124)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
      • 유니티 (1)
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
게임 엔진/[코드조선] 언리얼

언리얼 Pawn - Pawn 조작

2024. 5. 13. 10:10

폰의 조작 구현

UE5 부터는 아래의 방식이 Deprecated 방식이기에

Enhanced Input System을 사용하면 된다

만약 UE4를 사용하는 프로젝트라면

아래의 방식으로 조작을 구현할 수 있다

 

1) Input 키 설정

Toolbar > Settings > Project Settings > Input에서 입력 설정이 가능하다

 

- Axis Mappings

조이스틱의 레버와 유사하고

축과 관련된 정보를 담으며

-1 ~ 1 사이의 값이 게임로직에 전달된다


- Action Mappings

조이스틱의 버튼과 유사하고

0 혹은 1 값이 게임로직에 전달된다

키보드의 조작을 통해 이동을 구현하기 때문에

Axis Mappings를 추가해서 UpDown과 LeftRight 입력을 생성하면 된다
UpDown에는 W키 / S키, LeftRight에는 A키 / D키를 배정하고
각각의 키를 서로 다른 방향으로 구분하기 위해 Scale 값을 다르게 설정하면 된다



2) SetupPlayerInputComponent()에서 함수 바인드

언리얼은 입력을 처리하기 위해 InputComponent를 제공한다
InputComponent에서 입력 처리 함수를 바인드 시키면 입력 신호는 자동으로
해당 입력 처리 함수의 인자값으로 전달된다
입력 처리 함수를 바인드 하기에 적절한 이벤트 함수인

SetupPlayerInputComponent() 함수를 작성하면 된다

 

그리고 바인드 할 함수에

AddMovementInput(WorldDirection, Scale) 함수를 이용해 움직이게 하면 된다
WorldDirection은 이동할 방향을 결정하고 월드 좌표계 기준 방향벡터를 전달한다
Scale은 방향에 따라 움직이는 값이고 우리가 설정한 Scale 값대로 움직인다

// SPlayerPawn.h

...
class STUDYPROJECT_API ASPlayerPawn : public APawn
{
    ...

protected:
    virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

private:
    void UpDown(float InAxisValue);

    void LeftRight(float InAxisValue);

private:
    ...

};
// SPlayerPawn.cpp


...

void ASPlayerPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
    Super::SetupPlayerInputComponent(PlayerInputComponent);

    PlayerInputComponent->BindAxis(TEXT("UpDown"), this, &ThisClass::UpDown);
    PlayerInputComponent->BindAxis(TEXT("LeftRight"), this, &ThisClass::LeftRight);
}

void ASPlayerPawn::UpDown(float InAxisValue)
{
    AddMovementInput(GetActorForwardVector(), InAxisValue);
}

void ASPlayerPawn::LeftRight(float InAxisValue)
{
    AddMovementInput(GetActorRightVector(), InAxisValue);
}

 



플레이어 컨트롤러의 입력 필터링
언리얼 엔진의 입력 시스템의 입력 값은

InputComponent Checks를 통해 필터링된다

만약 PlayerController에서 입력 처리 로직이 작성되면,
해당 입력 값은 필터링 되어서 폰에 전달되지 않고

바로 게임 로직으로 이동한다

따라서, 폰을 조종하기 위한 입력 로직은 폰 클래스에 구현하고

PlayerController에서 입력 로직은 구현하지 않는 것이 올바른 방식이다

 

SetInputMode() 함수

플레이 버튼을 누르면 뷰포트로 바로 포커스가 잡히지 않는다

만약 바로 뷰포트로 포커스를 잡히게 하고 싶다면

SetInputMode() 함수를 사용하면 된다

// SPlayerController.cpp


#include "Controller/SPlayerController.h"

ASPlayerController::ASPlayerController()
{
	PrimaryActorTick.bCanEverTick = true;
}

 

저작자표시 비영리 변경금지 (새창열림)

'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글

언리얼 Character - Pawn vs. Character  (0) 2024.05.13
언리얼 Pawn - 애니메이션 기초 설정  (0) 2024.05.13
언리얼 Pawn - Pawn 클래스 생성 및 내부  (1) 2024.05.13
언리얼 게임 플레이 프레임워크 - 이벤트 함수 Flow  (0) 2024.05.12
언리얼 게임 플레이 프레임워크 - 플레이어 컨트롤러와 폰  (0) 2024.05.12
'게임 엔진/[코드조선] 언리얼' 카테고리의 다른 글
  • 언리얼 Character - Pawn vs. Character
  • 언리얼 Pawn - 애니메이션 기초 설정
  • 언리얼 Pawn - Pawn 클래스 생성 및 내부
  • 언리얼 게임 플레이 프레임워크 - 이벤트 함수 Flow
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.