UE小白,有錯(cuò)誤的地方請(qǐng)指出。
本文使用UE5,如在UE4中使用可能需調(diào)整某些API文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-614735.html
方法一
1.獲取鏡頭控制器,并開(kāi)啟點(diǎn)擊事件
APlayerController* playerController;
void AMeshChangeController::Item()
{
playerController = FAITestHelpers::GetWorld()->GetFirstPlayerController();
playerController->bEnableClickEvents = true;
playerController->SetShowMouseCursor(true);
playerController->EnableInput(playerController);
}
void AMeshChangeController::BeginPlay()
{
Super::BeginPlay();
Item();
}
2.鼠標(biāo)點(diǎn)擊發(fā)射射線(xiàn)
在Tick中調(diào)用射線(xiàn)發(fā)射邏輯
UE中API看起來(lái)沒(méi)有分鼠標(biāo)抬起和鼠標(biāo)按下API,如有大佬知道可以評(píng)論一下。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-614735.html
void AMeshChangeController::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
TestRay();
}
void
AMeshChangeController:: TestRay()
{
//鼠標(biāo)左鍵觸發(fā)
if(playerController->IsInputKeyDown(EKeys::LeftMouseButton))
{
FHitResult OutHit;//用于接收命中的Actor
FVector Start; //射線(xiàn)起點(diǎn)
FVector End ; //射線(xiàn)終點(diǎn)
FVector Dir; //鼠標(biāo)點(diǎn)擊的方向
playerController->DeprojectMousePositionToWorld(Start, Dir);
End = Start + (Dir * 100000);
DrawDebugLine(GetWorld(), Start, End, FColor::Green, false, 100, 0, 5);//繪制射線(xiàn)
bool isFinsh = GetWorld()->LineTraceSingleByObjectType(OutHit, Start, End, ECC_WorldStatic);//進(jìn)行射線(xiàn)檢測(cè)
if (Cast<AActor>(OutHit.GetActor()))
{
AActor* gameObject = OutHit.GetActor();
FString s = gameObject->GetActorNameOrLabel();
UE_LOG(LogTemp, Warning, TEXT("被點(diǎn)擊的物體,%s"), *s);
}
}
}
方法二
1.獲取鏡頭控制器,并開(kāi)啟點(diǎn)擊事件
APlayerController* playerController;
void AMeshChangeController::Item()
{
playerController = FAITestHelpers::GetWorld()->GetFirstPlayerController();
playerController->bEnableClickEvents = true;
playerController->SetShowMouseCursor(true);
playerController->EnableInput(playerController);
}
void AMeshChangeController::BeginPlay()
{
Super::BeginPlay();
Item();
}
2.使用射線(xiàn)API
playerController->HitResultTraceDistance = 1000000;
playerController->GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility,true,OutHit);
if (Cast<AActor>(OutHit.GetActor()))
{
}
到了這里,關(guān)于【UE5 C++】鼠標(biāo)點(diǎn)擊發(fā)射射線(xiàn)獲取物體信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!