언리얼5

[UE5 Multiplayer Shooting-16] 마우스 민감도 UI 구현

TIN9 2023. 9. 28.
반응형

개발을 진행하고 테스트하면서 민감도가 너무 빠르다는 것을 느꼈다. (저감도 유저...)

그래서 인게임에서 마우스 민감도를 조절할 수 있도록 구현하였다.

구현 방법

  • esc버튼 or 특정버튼 키 입력 설정
  • UserWidget을 상속받은 설정위젯 클래스 선언 및 구현
  • 플레이어 캐릭터에서 마우스 민감도를 조절할 float 변수 선언
  • 마우스 민감도 조절할 위젯을 meta = (BindWidget)으로 선언
  • 위젯의 입력값이 바뀌었을때 각 함수 바인딩 -> 플레이어에게 해당 값 전달

 

코드

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

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "ReturnToMainMenu.generated.h"

/**
 * 
 */
UCLASS()
class BLASTER_API UReturnToMainMenu : public UUserWidget
{
	GENERATED_BODY()

private:
	UPROPERTY(meta = (BindWidget))
	class USlider* MouseSensitivityBar;

	UPROPERTY(meta = (BindWidget))
	class UEditableTextBox* MouseSensitivityValue;
	UPROPERTY()
	class APlayerController* PlayerController;

protected:
	virtual bool Initialize() override;

	UFUNCTION()
	void ChangeSensitivityBar(float Value);

	UFUNCTION()
	void ChangeSensitivityTextValue(const FText& Text);

	
};
void UReturnToMainMenu::ChangeSensitivityBar(float Value)
{
	UWorld* World = GetWorld();
	if (World)
	{
		PlayerController = PlayerController == nullptr ? World->GetFirstPlayerController() : PlayerController;
		if (PlayerController == nullptr)
			return;
		ABlasterCharacter* Character = Cast<ABlasterCharacter>(PlayerController->GetCharacter());

		if (Character == nullptr)
			return;

		MouseSensitivityValue->SetText(FText::FromString(FString::Printf(TEXT("%f"), Value)));
		Character->SetMouseSensitivity(Value);
	}
}

void UReturnToMainMenu::ChangeSensitivityTextValue(const FText& Text)
{
	UWorld* World = GetWorld();
	if (World)
	{
		PlayerController = PlayerController == nullptr ? World->GetFirstPlayerController() : PlayerController;
		if (PlayerController == nullptr)
			return;
		ABlasterCharacter* Character = Cast<ABlasterCharacter>(PlayerController->GetCharacter());

		if (Character == nullptr)
			return;

		MouseSensitivityBar->SetValue(FCString::Atof(*Text.ToString().TrimQuotes()));
		Character->SetMouseSensitivity(MouseSensitivityBar->GetValue());
	}
}
.h
FORCEINLINE void SetMouseSensitivity(float _Sensitivity) { MouseSensitivity = _Sensitivity; }
.cpp
void ABlasterCharacter::Turn(float Value)
{
	AddControllerYawInput(Value * MouseSensitivity);
}

void ABlasterCharacter::LookUp(float Value)
{
	AddControllerPitchInput(Value * MouseSensitivity);
}

 

반응형

댓글