文章目录
添加接口修改渲染摄像机的位置和旋转
添加一个接口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中再用一个尺寸框包裹住头像,重载其高度和宽度
应该算是有提升吧