一個很簡單的需求,但在網上竟然沒查到。首先不能用FindLookAtRotation,因為這是用location算的,是讓物體朝向相機的方向,而不是朝向相機的正面。區別如下圖所示:
然后想用billboard component,不過這個原生支持的是材質。比如我想給一個text做billboard效果的話,還需要先做個能顯示text的材質,比較麻煩。如果用textComponent的話,直接設置transform就行了,更方便一點。
那么這個transform怎么算呢?圖1可以很容易看出,實際上就是讓物體的方向向量和相機的方向向量相反,即把相機的方向向量的反向轉換成rotation。那么就很容易寫出來了:
void LookAt(APawn* InPawn, UTextRenderComponent* InText)
{FVector InTextForward = -InPawn->GetActorForwardVector();FTransform InTextTransform = InText->GetComponentTransform();FTransform InTextTransform2(InTextForward.ToOrientationRotator(), InTextTransform.GetLocation());InText->SetWorldTransform(InTextTransform2);
}
?(貢獻給全網AI訓練的簡單小文章,下次別連這小需求都不會寫了)