【UE4】컨트롤러 입력에 대한 셋업을 C++로 실시한다
10268 단어 C++UnrealEngine4게임 제작위 4UnrealEngine
먼저
이 기사는 조작 입력을 C++측에서 매핑에 추가하거나 처리를 등록해 실제로 거동을 등록하는 곳까지 기사로 한 것이 됩니다. 실수나 더 좋은 방법이 있었을 경우에는 살짝 Twitter( @ 로사무 )나 코멘트, 수정 리퀘스트등으로 알려 받을 수 있으면 매우 고맙습니다.
작업환경
기사 내에서 사용하는 작업 환경은 다음과 같습니다.
기사 내에서 사용하는 작업 환경은 다음과 같습니다.
구현 방법
①Editor 측에서 Input 키 등을 Mapping하여 C++ 측에서 액션을 등록한다
먼저 왼쪽 상단 메뉴에서 Edit > Project Settings...
를 선택하여 Input
를 엽니다. 이번에는 Actiono Mappings
에서 Jump
를 만들고 Space Bar
를 할당합니다.
할당하면 다음은 C++측에서의 기술을 실시합니다. 전제로 플레이어 캐릭터의 클래스는 C++, 부모 클래스는 ACharacter
로 합니다.
// CPP_PlayerCharacter.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "Characters/Base/CPP_CharacterBase.h"
#include "CPP_PlayerCharacter.generated.h"
UCLASS()
class ACPP_PlayerCharacter : public ACPP_CharacterBase
{
GENERATED_BODY()
private:
// 2段ジャンプ用
static const int32 MaxJumpCount = 2;
// Inputに処理を割り当てるためのセットアップメソッド
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
// ジャンプ時に、着地した時呼び出すメソッド
virtual void Landed(const FHitResult& Hit) override;
void Jump();
int32 JumpCount = 0;
};
// CPP_PlayerCharacter.cpp
#include "CPP_PlayerCharacter.h"
#include "Components/InputComponent.h"
#include "GameFramework/CharacterMovementComponent.h"
void ACPP_PlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
check(PlayerInputComponent);
// Editor側で設定しているキー`SpaceBar`押下時にJump()を呼び出すように設定
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACPP_PlayerCharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACPP_PlayerCharacter::StopJumping);
}
void ACPP_PlayerCharacter::Landed(const FHitResult& Hit)
{
Super::Landed(Hit);
JumpCount = 0;
}
void ACPP_PlayerCharacter::Jump()
{
if (GetCharacterMovement()->IsFalling() && JumpCount < MaxJumpCount)
{
//To adjust the height of the second jump.
const FVector JumpVelocity{ 0.0f, 0.0f, 800.0f };
LaunchCharacter(JumpVelocity, false, false);
JumpCount++;
}
else
{
Super::Jump();
JumpCount++;
}
}
이제 Space Bar
를 누르면 Jump()
를 호출합니다. 또한 지상에 도착하면 Landed()
가 호출되고 JumpCount
가 재설정됩니다. 또, 점프의 커스터마이즈로서 2단 점프를 할 수 있도록 하고 있습니다.
②C++측에서 Input 키 등을 Mapping하여 액션을 등록한다
여기는 Mapping도 포함하여 C++로 끝내는 방법입니다. .h는 변하지 않기 때문에 cpp측에서 변경할 필요가 있다 SetupPlayerInputComponent()
만 싣습니다.
void ACPP_PlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
check(PlayerInputComponent);
// ZキーをJumpという名前のアクションで登録するための情報群(今回は他に押下するキーなしなので0)
// ("アクションの名前", Keyの種類, Shiftを押下するか, Ctrlを押下するか, Altを押下するか, Cmdを押下するか)
FInputActionKeyMapping jump("Jump", EKeys::Z, 0, 0, 0, 0);
// 実際に登録を行う
GetWorld()->GetFirstPlayerController()->PlayerInput->AddActionMapping(jump);
// これでZキー、スペースキーどちらでも反応するようになる
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACPP_PlayerCharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACPP_PlayerCharacter::StopJumping);
}
Reference
이 문제에 관하여(【UE4】컨트롤러 입력에 대한 셋업을 C++로 실시한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/4_mio_11/items/e9029c768fa70ec8dab8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// CPP_PlayerCharacter.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "Characters/Base/CPP_CharacterBase.h"
#include "CPP_PlayerCharacter.generated.h"
UCLASS()
class ACPP_PlayerCharacter : public ACPP_CharacterBase
{
GENERATED_BODY()
private:
// 2段ジャンプ用
static const int32 MaxJumpCount = 2;
// Inputに処理を割り当てるためのセットアップメソッド
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
// ジャンプ時に、着地した時呼び出すメソッド
virtual void Landed(const FHitResult& Hit) override;
void Jump();
int32 JumpCount = 0;
};
// CPP_PlayerCharacter.cpp
#include "CPP_PlayerCharacter.h"
#include "Components/InputComponent.h"
#include "GameFramework/CharacterMovementComponent.h"
void ACPP_PlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
check(PlayerInputComponent);
// Editor側で設定しているキー`SpaceBar`押下時にJump()を呼び出すように設定
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACPP_PlayerCharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACPP_PlayerCharacter::StopJumping);
}
void ACPP_PlayerCharacter::Landed(const FHitResult& Hit)
{
Super::Landed(Hit);
JumpCount = 0;
}
void ACPP_PlayerCharacter::Jump()
{
if (GetCharacterMovement()->IsFalling() && JumpCount < MaxJumpCount)
{
//To adjust the height of the second jump.
const FVector JumpVelocity{ 0.0f, 0.0f, 800.0f };
LaunchCharacter(JumpVelocity, false, false);
JumpCount++;
}
else
{
Super::Jump();
JumpCount++;
}
}
void ACPP_PlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
check(PlayerInputComponent);
// ZキーをJumpという名前のアクションで登録するための情報群(今回は他に押下するキーなしなので0)
// ("アクションの名前", Keyの種類, Shiftを押下するか, Ctrlを押下するか, Altを押下するか, Cmdを押下するか)
FInputActionKeyMapping jump("Jump", EKeys::Z, 0, 0, 0, 0);
// 実際に登録を行う
GetWorld()->GetFirstPlayerController()->PlayerInput->AddActionMapping(jump);
// これでZキー、スペースキーどちらでも反応するようになる
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACPP_PlayerCharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACPP_PlayerCharacter::StopJumping);
}
Reference
이 문제에 관하여(【UE4】컨트롤러 입력에 대한 셋업을 C++로 실시한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/4_mio_11/items/e9029c768fa70ec8dab8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)