vault backup: 2024-05-16 18:22:55
This commit is contained in:
parent
916297419f
commit
0f041a8605
54
03-UnrealEngine/Sequence/Sequence Runtime Binding.md
Normal file
54
03-UnrealEngine/Sequence/Sequence Runtime Binding.md
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Sequence Runtime Binding
|
||||
date: 2024-05-16 17:55:58
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
# 前言
|
||||
参考:
|
||||
1. [sequencer mute tracks at runtime from c](https://forums.unrealengine.com/t/sequencer-mute-tracks-at-runtime-from-c/476278/3)
|
||||
|
||||
# 方案一
|
||||
- UMovieSceneTrack::SetEvalDisabled(bool)
|
||||
- ULevelSequence::MarkAsChanged()
|
||||
- MovieSceneCompiledDataManager::GetPrecompiledData()->Compile(ULevelSequence*)
|
||||
```c++
|
||||
// You first have to set the unwanted track as disabled via
|
||||
void YourDisableTrackFunction(UMovieSceneTrack* MovieSceneTrack, bool Value)
|
||||
{
|
||||
if (MovieSceneTrack)
|
||||
{
|
||||
MovieSceneTrack->SetEvalDisabled(Value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Then notify the sequencer that the tracks have been modified using MarkAsChanged and UMovieSceneCompiledDataManager::GetPrecompiledData()->Compile.
|
||||
void YourMarkAsChangedFunction(ULevelSequence* Sequence)
|
||||
{
|
||||
if (Sequence)
|
||||
{
|
||||
Sequence->MarkAsChanged();
|
||||
if (UMovieSceneCompiledDataManager::GetPrecompiledData())
|
||||
{
|
||||
UMovieSceneCompiledDataManager::GetPrecompiledData()->Compile(Sequence);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
# 方案二
|
||||
UMovieSceneSequenceExtensions methods are not exported. They don’t have the PLUGIN_API macro in the class, so you can’t link to them. Someone on discord said you can copy the plugin into your own project and add your own API macro and rebuild, but seems like a bit of work.
|
||||
```c++
|
||||
#include "LevelSequencePlayer.h" #include "MovieSceneSequencePlaybackSettings.h" #include "DefaultLevelSequenceInstanceData.h" #include "LevelSequenceActor.h" void UMyAnimInstance::StartSequence_Implementation() { FMovieSceneSequencePlaybackSettings Settings; ALevelSequenceActor *SequenceActor = nullptr; ULevelSequencePlayer* player = ULevelSequencePlayer::CreateLevelSequencePlayer(this, this->MySequence, Settings, SequenceActor); check(player); check(SequenceActor); SequenceActor->bOverrideInstanceData = 1; UDefaultLevelSequenceInstanceData* InstanceData = Cast<UDefaultLevelSequenceInstanceData>(SequenceActor->DefaultInstanceData.Get()); InstanceData->TransformOrigin = this->GetOwningActor()->GetActorTransform(); UMovieScene* MovieScene = this->MySequence->GetMovieScene(); check(MovieScene); const FMovieSceneBinding* Binding = Algo::FindBy(MovieScene->GetBindings(), FString("SequencerActor"), &FMovieSceneBinding::GetName); check(Binding); EMovieSceneObjectBindingSpace Space = EMovieSceneObjectBindingSpace::Root; FMovieSceneObjectBindingID BindingID = UE::MovieScene::FRelativeObjectBindingID(Binding->GetObjectGuid()); // Not sure about this if (Space == EMovieSceneObjectBindingSpace::Root) { BindingID.ReinterpretAsFixed(); } SequenceActor->AddBinding(BindingID, this->GetOwningActor()); player->Play(); // Save actor and player in properties this->SequencerActor = SequenceActor; this->SequencerPlayer = player; }
|
||||
```
|
||||
|
||||
#
|
||||
- Runtime修改绑定
|
||||
- UE4:扩展Sequencer的BakeTransform有关Camera的参数:https://zhuanlan.zhihu.com/p/554484287
|
||||
- **LevelSequence对象绑定分析**:https://zhuanlan.zhihu.com/p/548155341
|
||||
- 自定义Track
|
||||
- https://zhuanlan.zhihu.com/p/396353973
|
||||
- https://zhuanlan.zhihu.com/p/414179358
|
||||
- https://zhuanlan.zhihu.com/p/413151867
|
Loading…
x
Reference in New Issue
Block a user