UE5 自定义主视口大小位置,调整视口中心点

本功能适用于边上有UI遮挡还想要剩余窗口能够完整显示

本功能参考

UE5 runtime模式下自定义视口大小和位置并跟随分辨率自适应缩放_ue runtime视口-CSDN博客

CustomGameViewSizeSub.h

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

#pragma once

#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "CustomGameViewSizeSub.generated.h"



DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnViewportResized);
/**
 * 
 */
UCLASS()
class XIAOMINGGAS_API UCustomGameViewSizeSub : public UGameInstanceSubsystem
{
	GENERATED_BODY()
	
public:
 
	UPROPERTY(BlueprintAssignable, Category = "Delegate")
	FOnViewportResized OnViewportResized;
 
public:
 
	void ViewportResize(FViewport* Viewport, uint32 Size);
 
	virtual void Initialize(FSubsystemCollectionBase& Collection) override;
 
	UFUNCTION(BlueprintCallable, Category = "Fun Tool")
	void AdjustViewportSize(float ScaleX,float ScaleY,float OffsetLeft,float OffsetTap);
	
};

CustomGameViewSizeSub.cpp

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



#include "CustomGameViewSizeSub.h"
#include "UnrealClient.h"
#include "Engine/Engine.h"
#include "Engine/GameViewportClient.h"


void UCustomGameViewSizeSub::ViewportResize(FViewport* Viewport, uint32 Size)
{
	GEngine->GameViewport->Viewport->ViewportResizedEvent.AddUObject(this, &UCustomGameViewSizeSub::ViewportResize);
}

void UCustomGameViewSizeSub::Initialize(FSubsystemCollectionBase& Collection)
{
	OnViewportResized.Broadcast();
}

void UCustomGameViewSizeSub::AdjustViewportSize(float ScaleX,float ScaleY,float OffsetLeft,float OffsetTap)
{
	UE_LOG(LogTemp, Log, TEXT(" AdjustViewportSize "));
	if (GEngine->GameViewport)
	{
		FVector2D ViewportSize;
		GEngine->GameViewport->GetViewportSize(ViewportSize);
 
		if (ViewportSize.X > 0 && ViewportSize.Y > 0)
		{
			//视口大小缩放
			GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeX = ScaleX / ViewportSize.X;
			GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeY = ScaleY / ViewportSize.Y;
			//基于视口原点偏移,原点是左上角(0,0)
			GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginX = OffsetLeft / ViewportSize.X;
			GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginY = OffsetTap / ViewportSize.Y;
		}
	}
	
}


蓝图使用

 Build.cs中添加 "SlateCore","Slate"

用于解决VS编译失败的问题

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore","GameplayAbilities","GamePlayTags","GameplayTasks","UnrealEd","SlateCore","Slate" });

		PrivateDependencyModuleNames.AddRange(new string[] { "SkeletalMeshUtilitiesCommon" });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值