카테고리 없음

25.02.03 언리얼 드론만들기(상)

alwaysyoung2 2025. 2. 3. 20:57
728x90
반응형

enhanced input system 을 활용하여 드론을 만들어보려고 한다.

일반적인 캐릭터 클래스가 아닌 비행물체는 중력의 영향을 받지 않으므로 Pawn class를 사용해야한다.

 

gamemode와 controler의 코드들을 만들어 준 뒤

 

에디터에서 input action 을 생성해준다.

 

드론의 xy움직임을 담당해줄 DroneMove,

드론의 z움직임을 담당해줄 Moveup,

드론의 시야움직임을 담당해줄 DroneLook,

드론의 roll움직임을 담당해줄 Roll 이 필요하다.

 

이후 IMC 를 생성하여 각 키를 매핑해준다

 

그 후에 controler 코드에서 imc 를 활성화해준다.

#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "DroneController.generated.h"

class UInputMappingContext;
class UInputAction;


/**
 * 
 */
UCLASS()
class PRACTICE_API ADroneController : public APlayerController
{
	GENERATED_BODY()

public:
	ADroneController();
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
	UInputMappingContext* InputMappingContext;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
	UInputAction* DroneMoveAction;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
	UInputAction* DroneLookAction;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
	UInputAction* MoveupAction;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
	UInputAction* RollAction;

	virtual void BeginPlay() override;
	
};

 h파일

 

// Fill out your copyright notice in the Description page of Project Settings.


#include "DroneController.h"
#include "EnhancedInputSubSystems.h"


ADroneController::ADroneController()
	: InputMappingContext(nullptr),
	DroneMoveAction(nullptr),
	DroneLookAction(nullptr),
	MoveupAction(nullptr),
	RollAction(nullptr)
{
}

void ADroneController::BeginPlay()
{
	Super::BeginPlay();
	if (ULocalPlayer* LocalPlayer = GetLocalPlayer())
	{
		if (UEnhancedInputLocalPlayerSubsystem* SubSystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
		{
			if (InputMappingContext)
			{
				SubSystem->AddMappingContext(InputMappingContext, 0);
			}
		}
	}
}

 

cpp 파일

 

이후 실행한 후에 컨트롤러를 상속받는 블루프린트를 사용해 확인해보면 detail패널에 변수가 추가됨을 확인할 수 있다.

 

728x90
반응형