You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unreal Engine 5:如何通过光标检测玩家注视的对象?

在UE5中实现注视Actor显示名称的方案

核心思路就是从玩家相机发射射线检测前方Actor,这比单纯用相机向量更可靠,因为射线能准确判断是否击中目标,还能处理遮挡问题。以下是具体实现步骤:

一、准备工作

  • 给需要被识别的Actor(比如立方体)添加标签(例如Interactable),方便后续筛选;也可以直接检测特定类(比如StaticMeshActor)。
  • 创建一个UMG Widget,用来显示Actor名称,将其锚点设为屏幕中央,初始状态设置为隐藏。

二、实现射线检测逻辑

可以在玩家角色的Tick函数中每帧执行检测,或者用定时器控制检测频率:

蓝图实现方式

  1. 获取玩家相机的世界位置和向前向量,计算射线终点(比如向前延伸1000单位,可按需调整)。
  2. 使用Line Trace By Channel节点,选择Visibility碰撞通道,避免检测到场景中不可见的碰撞体。
  3. 检测到Actor后,通过标签或类判断是否为目标对象,获取它的名称。
  4. 如果击中目标,显示UMG Widget并将文本设置为Actor名称;未击中则隐藏Widget。

C++代码示例

void AMyPlayerCharacter::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    // 获取相机位置和向前向量
    FVector Start = GetCameraComponent()->GetComponentLocation();
    FVector End = Start + GetCameraComponent()->GetForwardVector() * 1000.0f;
    
    FCollisionQueryParams QueryParams;
    QueryParams.AddIgnoredActor(this); // 忽略玩家自身

    FHitResult HitResult;
    if (GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECC_Visibility, QueryParams))
    {
        AActor* HitActor = HitResult.GetActor();
        if (HitActor && HitActor->ActorHasTag("Interactable"))
        {
            if (NameDisplayWidget)
            {
                NameDisplayWidget->SetText(FText::FromString(HitActor->GetName()));
                NameDisplayWidget->SetVisibility(ESlateVisibility::Visible);
            }
        }
        else
        {
            HideNameWidget();
        }
    }
    else
    {
        HideNameWidget();
    }
}

void AMyPlayerCharacter::HideNameWidget()
{
    if (NameDisplayWidget)
    {
        NameDisplayWidget->SetVisibility(ESlateVisibility::Hidden);
    }
}

三、关键注意事项

  • 射线长度要合理,太长会检测到远处无关对象,太短会漏检近距离目标。
  • 必须忽略玩家自身,避免射线检测到角色模型导致误触发。
  • UMG Widget的渲染层级要设置为最上层,防止被其他UI元素遮挡。
  • 如果需要只显示特定类型Actor的名称,可通过判断Actor类(比如Cast<ACubeActor>(HitActor))替代标签检测。

内容的提问来源于stack exchange,提问作者Gorshipisk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:48:35