獲取編輯器視口選中了哪些Actors?
USelection* SelectedActors = GEditor->GetSelectedActors();
if (SelectedActors)
{
TArray<UObject*> SelectedActorsArr;
SelectedActors->GetSelectedObjects(AActor::StaticClass(), SelectedActorsArr);
if (SelectedActorsArr.Num() != 1)
{
UE_LOG(LogTemp, Error, TEXT("SelectedActorNum != 1"));
return;
}
FTransform SelectedActorTransform;
UObject* curObj = SelectedActorsArr[0];
AActor* Actor = Cast<AActor>(curObj);
if (Actor)
{
SelectedActorTransform = Actor->GetTransform();
UE_LOG(LogTemp, Warning, TEXT("SelectedActor Transform:%s"), *SelectedActorTransform.ToString());
}
else
{
return;
}
}
編輯器視口中如何生成Actor?
UWorld* World = GCurrentLevelEditingViewportClient ? GCurrentLevelEditingViewportClient->GetWorld() : nullptr;
if (!World)
{
return;
}
//創建可生成的鏡頭代碼參考void FSequencer::CreateCamera()
//void FSequencer::CreateCamera()主要是點擊sequencer工具Toolbar上的“Create Camera”執行的。
const FScopedTransaction Transaction(LOCTEXT("CreateCameraFromTemplete", "Create Camera From Templete"));
FActorSpawnParameters SpawnParams;
// Don't bother transacting this object if we're creating a spawnable since it's temporary
SpawnParams.ObjectFlags &= ~RF_Transactional;
// Set new camera to match viewport
ACameraActor* NewCamera = World->SpawnActor<ACameraActor>(cameraClass,SelectedActorTransform,SpawnParams);
if (!NewCamera)
{
UE_LOG(LogTemp,Error,TEXT("Spawn Templete Camera Actor return null."));
return;
}
知道兩個世界座標系下的FTransform,如果計算座標B對於座標A的相對座標?
如果只計算Location,可以通過
A.InverseTransformPosition(B.Location);
類似的函數參見InverseTransform*相關函數。
如果計算的是Transform,可以知道:
B = F(相對座標)*A;
B*Inverse(A) = F(相對座標)*A*Inverse(A)=F(相對座標)
所以F(相對座標) = B*Inverse(A)
如何在遊戲運行時動態獲得屏幕的截圖信息(例如巫師中的存檔圖片等)?
一開始嘗試調用的是GetViewportScreenShot函數,但是發現直接調用這個函數是存在問題,比如打包後運行或者standalone模式運行發現返回的是純黑的內容,問了下官方人員,官方人員建議我使用FScreenshotRequest::RequestScreenshot,而且不用長時間等待數據。具體如何使用可參考:Engine\Source\Developer\FunctionalTesting\Private\ScreenshotFunctionalTest.cpp,這個調用不僅能生成圖片文件,而且還可以通過註冊回調函數拿到圖片的數據。
如圖,如果Idle動畫播放了一半切換成了Stand狀態,動畫會從idle融合到Stand動畫,如果這時候再切到Idle狀態,stand融合到的是idle一半時候的姿勢,我們想融合到Idle最開始的姿勢。
解決辦法:勾選Blend Poses by int結點的Reset Child on Activation.