bool UMovieSceneSubtitleTrack::SupportsType(TSubclassOf<UMovieSceneSection> SectionClass) const //⑧
这个接口指出此编辑器支持的 Track
类型
当前我们的代码是定序器子section类型
2.这些是sceneTrack接口,我们需要在源文件中实现他们。这里面大部分是只有两三句代码就实现了,多一些代码才能实现的会在后面介绍
public:
// UMovieSceneTrack interface
virtual void RemoveAllAnimationData() override;
virtual bool HasSection(const UMovieSceneSection& Section) const override;
virtual void AddSection(UMovieSceneSection& Section) override;
virtual void RemoveSection(UMovieSceneSection& Section) override;
virtual void RemoveSectionAt(int32 SectionIndex) override;
virtual bool IsEmpty() const override;
virtual const TArray<UMovieSceneSection*>& GetAllSections() const override;
virtual bool SupportsType(TSubclassOf<UMovieSceneSection> SectionClass) const override;
virtual bool SupportsMultipleRows() const;
virtual FText GetDisplayName() const override;
virtual UMovieSceneSection* CreateNewSection() override;
virtual UMovieSceneSection* AddNewSubtitleOnRow(FFrameNumber Time, int32 RowIndex);
virtual UMovieSceneSection* AddNewSubtitleSection(FFrameNumber Time) { return AddNewSubtitleOnRow(Time, INDEX_NONE); };
3.创建一个字幕section类,后面需要用到
#pragma once
#include "MovieSceneSection.h"
UCLASS()
class UMovieSceneSubtitleSection:public UMovieSceneSection
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, Category = "Parameters Subtitle",meta=(ShowOnlyInnerProperties))
FMovieSceneSubtitleParams Params;//结构体中有哪些属性(文本,文字颜色,字体大小,背景颜色,对齐方式)
};
//Params变量是结构体,目前我还没有写
4.加上结构体就是下面的代码
#pragma once
#include "ETypeAlignmentEnum.h"
#include "MovieSceneSection.h"
USTRUCT()
struct FMovieSceneSubtitleParams
{
GENERATED_BODY()
FMovieSceneSubtitleParams();//构造函数生成所有的属性
FString UpdatedMessage = "Subtitle";
UPROPERTY(EditAnywhere, meta = (MultiLine = true)) FText SubtitleText = FText::FromString(UpdatedMessage);//多行,文本类型,默认值是Subtitle
UPROPERTY(EditAnywhere) FLinearColor SubtitleColor = FLinearColor(1,1,1,1);
UPROPERTY(EditAnywhere) int32 TSizeFont = 32;
UPROPERTY(EditAnywhere) FLinearColor ColorBackground = FLinearColor(0, 0, 0, 0.5);
UPROPERTY(EditAnywhere) ETypeAlignmentEnum AlignmentText = ETypeAlignmentEnum::InCenter;
UPROPERTY()UTextureRenderTarget2D* TextureAlpha;
UPROPERTY()UTextureRenderTarget2D* TextureRenderTarget;
UPROPERTY()UTextureRenderTarget2D* TextureRenderTargetBG;
FCanvas* Canvas;
};
UCLASS()
class UMovieSceneSubtitleSection:public UMovieSceneSection
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, Category = "Parameters Subtitle",meta=(ShowOnlyInnerProperties))
FMovieSceneSubtitleParams Params;//结构体中有哪些属性(文本,文字颜色,字体大小,背景颜色,对齐方式)
};
结构体对应UE4编辑器的section位置
这样UMovieSceneSubtitleSection只需要等待new一个就行了
UMovieSceneSection* UMovieSceneSubtitleTrack::CreateNewSection() //一创建一个字幕section
{
return NewObject<UMovieSceneSubtitleSection>(this, UMovieSceneSubtitleSection::StaticClass(), NAME_None, RF_Transactional);
}