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


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

添加一个接口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中再用一个尺寸框包裹住头像,重载其高度和宽度
在这里插入图片描述
应该算是有提升吧
在这里插入图片描述

posted @ 2025-08-16 16:14  yfceshi  阅读(15)  评论(0)    收藏  举报