UE4雜項

獲取編輯器視口選中了哪些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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章