加载关卡动画
2023年12月8日 2024年1月11日
Level Preloading
说明
在主菜单选择关卡, 点击 Start Game
后也许会出现程序静止的情况, 这是因为在加载关卡
解决方法有以下几种:
- 异步加载
- 关卡流送
Level Streaming
- 加载关卡前播放加载动画
加载动画结束后载入关卡
API导航
所有动画结束都会触发该函数
1virtual void OnAnimationFinished_Implementation(const UWidgetAnimation* Animation);
同样也有OnAnimationStarted_Implementation
添加载入动画
- 添加载入动画
protected
ShootThemUp: Menu/UI/STUMenuWidget.h
1UPROPERTY(meta = (BindWidgetAnim), Transient) 2UWidgetAnimation *LoadAnimation;
- 点击
StartGame
按钮时播放
1void USTUMenuWidget::OnStartGame() 2{ 3 PlayAnimation(LoadAnimation); 4 5 /* 6 const FName LevelName = "DefaultMap"; 7 UGameplayStatics::OpenLevel(GetWorld(), LevelName); 8 */ 9 10 /* 11 if (!GetWorld()) return; 12 13 const auto STUGameInstance = GetWorld()->GetGameInstance<USTUGameInstance>(); 14 if (!STUGameInstance) return; 15 16 // if (STUGameInstance->GetStartupLevelName().IsNone()) 17 if (STUGameInstance->GetStartupLevel().LevelName.IsNone()) 18 { 19 UE_LOG(LogSTUMenuWidget, Error, TEXT("StartupLevelName is none")); 20 return; 21 } 22 23 24 // UGameplayStatics::OpenLevel(GetWorld(), STUGameInstance->GetStartupLevelName()); 25 UGameplayStatics::OpenLevel(GetWorld(), STUGameInstance->GetStartupLevel().LevelName); 26 */ 27}
- 动画播放结束时载入关卡
protected
ShootThemUp: Menu/UI/STUMenuWidget.h
1virtual void OnAnimationFinished_Implementation(const UWidgetAnimation* Animation) override;
ShootThemUp: Menu/UI/STUMenuWidget.cpp
1void USTUMenuWidget::OnAnimationFinished_Implementation(const UWidgetAnimation *Animation) 2{ 3 if (Animation != LoadAnimation) return; 4 5 if (!GetWorld()) return; 6 7 const auto STUGameInstance = GetWorld()->GetGameInstance<USTUGameInstance>(); 8 if (!STUGameInstance) return; 9 10 if (STUGameInstance->GetStartupLevel().LevelName.IsNone()) 11 { 12 UE_LOG(LogSTUMenuWidget, Error, TEXT("StartupLevelName is none")); 13 return; 14 } 15 16 UGameplayStatics::OpenLevel(GetWorld(), STUGameInstance->GetStartupLevel().LevelName); 17}
实现载入动画
添加3个元素
-
载入图片
可以复用上节的ShowImage一开始并未隐藏, 因此需设置不会触发鼠标事件; 设置颜色Alpha通道为0实现隐藏效果
-
加载效果
设置隐藏
-
文本
一开始同样不隐藏设置不会触发鼠标事件
实现动画
可适当延长
0-1s: 隐去之前的内容
Alpha通道由0变为1; 设置Visiblity, 屏蔽按钮点击
1-2s: 显示加载状态
-
加载效果
-
文本
Alpha通道由0变为1