UE5多人MOBA+GAS 42、提高头像画质

发布于:2025-08-14 ⋅ 阅读:(21) ⋅ 点赞:(0)


添加接口修改渲染摄像机的位置和旋转

添加一个接口RenderActorTargetInterface,用于修改头像渲染的摄像机位置以及方向
在这里插入图片描述
在这里插入图片描述

#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "RenderActorTargetInterface.generated.h"

// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class URenderActorTargetInterface : public UInterface
{
	GENERATED_BODY()
};

/**
 * 角色渲染目标接口
 * 用于获取角色渲染时的捕获位置和旋转(如头像渲染、预览等)
 */
class IRenderActorTargetInterface
{
	GENERATED_BODY()

	// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
	// 获取捕获的本地位置
	virtual FVector GetCaptureLocalPosition() const = 0;

	// 获取捕获的本地旋转
	virtual FRotator GetCaptureLocalRotation() const = 0;
};

让角色基类继承该接口

class ACCharacter : public ACharacter, public IAbilitySystemInterface, public IGenericTeamAgentInterface, public IRenderActorTargetInterface
public:
	// 获取头像截取的位置
	virtual FVector GetCaptureLocalPosition() const override;
	// 获取头像截取的旋转
	virtual FRotator GetCaptureLocalRotation() const override;

private:
	// 头像截取位置和旋转
	UPROPERTY(EditDefaultsOnly, Category = "Capture")
	FVector HeadshotCaptureLocalPosition;
	UPROPERTY(EditDefaultsOnly, Category = "Capture")
	FRotator HeadshotCaptureLocalRotation;
FVector ACCharacter::GetCaptureLocalPosition() const
{
	return HeadshotCaptureLocalPosition;
}

FRotator ACCharacter::GetCaptureLocalRotation() const
{
	return HeadshotCaptureLocalRotation;
}
void USkeletalMeshRenderWidget::NativeConstruct()
{
	Super::NativeConstruct();
	
	// 获取拥有该UI的玩家角色
	ACharacter* PlayerCharacter = GetOwningPlayerPawn<ACharacter>();
	// 尝试转换为渲染目标接口
	IRenderActorTargetInterface* PlayerCharacterRenderTargetInterface = Cast<IRenderActorTargetInterface>(PlayerCharacter);

	if (PlayerCharacter && SkeletalMeshRenderActor)
	{
		// 配置骨骼网格和动画类
		SkeletalMeshRenderActor->ConfigureSkeletalMesh(
			PlayerCharacter->GetMesh()->GetSkeletalMeshAsset(), 
			PlayerCharacter->GetMesh()->GetAnimClass()
		);

		// 获取场景捕捉组件
		USceneCaptureComponent2D* SceneCapture = SkeletalMeshRenderActor->GetCaptureComponent();
		// 如果接口和场景捕捉组件都有效
		if (PlayerCharacterRenderTargetInterface && SceneCapture)
		{
			// 设置捕捉组件的相对位置和旋转
			SceneCapture->SetRelativeLocation(PlayerCharacterRenderTargetInterface->GetCaptureLocalPosition());
			SceneCapture->SetRelativeRotation(PlayerCharacterRenderTargetInterface->GetCaptureLocalRotation());
		}
	}
}

到角色中设置摄像机的位置以及旋转
在这里插入图片描述

提高画质

在这里插入图片描述
在这里插入图片描述
取消这个大气的勾选后背景将会变成黑色
在这里插入图片描述
添加新的材质设置为后期处理
在这里插入图片描述
勾选输出透明度
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
把刚刚的材质放入后处理材质中
在这里插入图片描述
修改头像UI的尺寸
在这里插入图片描述
到GameplayWidget中再用一个尺寸框包裹住头像,重载其高度和宽度
在这里插入图片描述
应该算是有提升吧
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到