LevelSequence源码分析

本文主要分析Unreal LevelSequence在游戏运行时的工作原理,特别是如何控制Actor的隐藏。通过跟踪Editor Sequence中的ActorHiddenInGame实现,结合FMovieSceneEvaluationRange、FMovieSceneContext等核心概念,揭示了LevelSequencePlayer如何管理ALevelSequenceActor的播放。在遇到Actor隐藏失效的问题时,作者通过断点调试发现是由于Shipping版本中静态对象的优化导致,解决方案是将静态对象改为可移动。文章提供了逆向分析源码的方法,强调理解关键步骤而非纠结所有细节。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

前言

这篇文章主要讲的是Unreal LevelSequence RunTime的部分。即在游戏中运行Level Sequence的源码解析。(而且抛去Replicated 的Sequence,一般Sequence不会在DS上播,因为比较浪费性能,在DS上播的很少这么使用,所以本篇自动忽略。)
即,本篇主要讲的是单纯的只在客户端运行时的LevelSequence的步骤。

作用

  • 我是如何分析LevelSequence 源码过程
  • 本篇文章主要讲述LevelSequeence中绑定的Actor是如何在运行游戏时候被运行。
  • 可以解决LevelSequence运行时的相关bug。比如楼主接触LevelSequence遇到的一个bug,就是Editor Play运行正常,但是在Shipping(正式发布)版运行,某个被绑定在Sequence中的Actor跟没绑定一样。不起作用…

问题分析

我比较喜欢直接讲述实际的案例,我们就拿一个例子来说吧,就是Sequence中我们可以很简单的控制Actor的隐藏,那么在游戏中运行时,是如何被隐藏的,隐藏步骤是啥样的,这个怎么找纳?下面就来说说具体步骤。

1.Editor Sequence中先将Actor 隐藏

  • 从以下,我们知道是通过ActorHiddenInGame实现的

节点

2.堆栈寻找

  • 从上述步骤我们知道隐藏一个Actor,Sequence也是通过ActorHiddenInGame来实现的,于是就知道了
UFUNCTION(BlueprintCallable, Category="Rendering", meta=( DisplayName = "Set Actor Hidden In Game", Keywords = "Visible Hidden Show Hide" ))
virtual void SetActorHiddenInGame(bool bNewHidden);

我们是否可以直接在这个方法里直接断点一下,寻找到Sequence在Runtime将Actor隐藏的堆栈。这个办法分析源码必备之技巧。尤其对于这种一开始摸不着头脑,可以反向推理。
节点

在UE4中实现在跳转关卡过程中显示全黑镜头只显示文字UI可以通过以下步骤来实现: 1. 创建一个全屏幕的黑色材质。 2. 创建一个UI Widget,将需要显示的文字UI添加到其中。 3. 在需要进行跳转的关卡中添加一个新的Actor,并将其命名为“LevelTransitionActor”。 4. 在LevelTransitionActor中添加一个SceneComponent,并将其命名为“CameraTarget”。 5. 将CameraTarget的位置设置为跳转目标关卡的摄像机位置,将其朝向设置为目标关卡的摄像机朝向。 6. 创建一个新的LevelSequence,并将其命名为“LevelTransitionSequence”。 7. 在LevelTransitionSequence中添加一个新的MovieSceneCameraCutTrack,并将其设置为跳转目标关卡的摄像机。 8. 在LevelTransitionSequence中添加一个新的MovieSceneFloatTrack,并将其命名为“FadeTrack”。 9. 在FadeTrack中添加一个新的FloatChannel,并将其命名为“FadeChannel”。 10. 在LevelTransitionSequence中添加一个新的LevelSequenceActor,并将其命名为“LevelTransitionActor”. 11. 在LevelTransitionActor中添加一个新的SceneComponent,并将其命名为“FadeTarget”. 12. 将FadeTarget的位置设置为跳转目标关卡的摄像机位置。 13. 将FadeTarget的Scale设置为(2,2,2),并将其朝向设置为与CameraTarget相同。 14. 在LevelTransitionActor中添加一个新的StaticMeshComponent,并将其设置为全屏幕大小。 15. 将StaticMeshComponent的材质设置为黑色。 16. 在LevelTransitionActor中添加一个新的WidgetComponent,并将其设置为之前创建的UI Widget。 17. 在FadeTrack中添加两个浮点值,分别为0和1,表示淡入和淡出的时间。 18. 将FadeTrack的淡入时间设置为0.5秒,淡出时间设置为1秒。 19. 将LevelTransitionSequence的长度设置为淡入和淡出的时间之和。 20. 将LevelTransitionSequence的输出设置为LevelTransitionActor,将FadeTarget设置为LevelTransitionActor,将CameraTarget设置为之前创建的LevelTransitionActor。 在运行游戏时,当需要进行关卡跳转时,将LevelTransitionSequence播放,并将淡入和淡出的时间设置为合适的值。这样就可以实现在跳转关卡过程中显示全黑镜头只显示文字UI的效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值