• UE5如何实现漫游摄像机跟踪?


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Unity2D求承包 2024-06-25 19:30 采纳率: 40% 浏览 13 首页/ 游戏 / UE5如何实现漫游摄像机跟踪? ue5 在使用UE5制作即时战略游戏时遇到一个问题。需要摄像机可以漫游移动,同时可随时切换摄像机跟踪某个单位移动。触发摄像机移动后解除跟踪。目前使用set view target with blend蓝图能够实现切换跟踪,切换之后,该单位的AI move会被打断。请问应该如何制作这个摄像机漫游和跟踪的功能才不影响单位的移动逻辑? 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-25 19:30
      关注

      引自免费微信小程序:皆我百晓生

      要实现一个UE5中的摄像机漫游功能,并且可以跟踪并自动解除跟踪当前目标单位的AI移动,你需要创建一个新的蓝图组件来控制摄像机的行为。首先,确保已经安装了FbxMeshUObject类。

      1. 创建蓝图组件

      在编辑器中,打开Assets文件夹下的Blueprints目录,然后新建一个蓝图(例如命名为CameraMove)。右键点击CameraMove蓝图,在弹出菜单中选择Create New Blueprint Component。接下来,将CameraMove蓝图拖放到场景中。

      2. 设置追踪机制

      CameraMove蓝图中,为追踪对象设置一个OnMouseButtonDown事件监听器。当用户按下鼠标左键时,此事件被激活,表明玩家正在尝试跟踪一个单位。

      void CameraMove::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
      {
          // 获取鼠标坐标
          FVector2D MousePosition;
          if (MouseEvent.GetScreenSpacePosition(MousePosition))
          {
              // 计算相机位置到鼠标的距离
              float Distance = FVector2D(MyGeometry.BoundingSphere.Center - MousePosition).Size();
              
              // 如果鼠标位置与单位相对应的位置很近,表示可以进行跟踪
              if (Distance < UnitRadius)
              {
                  SetViewTargetWithBlend(UnitGuid);
                  bIsTrackingUnit = true;
              }
              else
              {
                  bIsTrackingUnit = false;
              }
          }
      }
      

      3. 定义追踪单位的结构体

      为了方便管理,定义一个UnitInfo结构体,包含追踪的目标单位的唯一标识符、位置等信息。

      struct FUnitInfo
      {
          int32 UnitGuid; // 单位的GUID
          FVector Location; // 单位的位置
      };
      

      4. 实现自动解除跟踪

      CameraMove蓝图中添加一个名为SetViewTargetWithBlend的方法,用于自动解除跟踪。

      void CameraMove::SetViewTargetWithBlend(FGuid TargetGuid, float BlendTimeInSeconds)
      {
          // 获取目标单位的信息
          UWorld* World = GetWorld();
          if (World && !bIsTrackingUnit)
          {
              auto UnitActor = World->GetFirstPlayerController()->GetPawn();
              if (UnitActor)
              {
                  FUnitInfo Info;
                  Info.UnitGuid = UnitActor->GetUniqueNetId();
                  Info.Location = UnitActor->GetActorLocation();
      
                  // 检查是否是同一单位
                  if (Info.UnitGuid == TargetGuid)
                  {
                      UE_LOG(LogTemp, Warning, TEXT("Detected same unit"));
                      return;
                  }
      
                  // 更新目标单位信息
                  TargetUnitGuid = TargetGuid;
                  TargetUnitLocation = Info.Location;
      
                  // 开始跟踪
                  SetViewTarget(TargetGuid);
      
                  // 设置过渡时间
                  if (BlendTimeInSeconds > 0)
                  {
                      FTimerHandle Handle;
                      FTimerDelegate Delegate = FTimerDelegate::CreateLambda([this]
                      {
                          SetViewTargetWithBlend(TargetGuid, 0.0f);
                      });
                      GetWorld()->GetTimerManager().SetTimer(Handle, Delegate, BlendTimeInSeconds, false);
                  }
              }
          }
      }
      

      5. 初始化和释放

      确保在游戏开始时正确初始化CameraMove蓝图,并在游戏退出前正确释放它。

      // 在GameStart函数中初始化
      void GameStart()
      {
          if (!CameraMove) { return; }
          CameraMove->Initialize();
      }
      
      // 在GameEnd函数中释放
      void GameEnd()
      {
          if (CameraMove) { CameraMove->Release(); }
      }
      

      6. 测试与优化

      运行游戏并检查CameraMove蓝图的工作情况。根据测试结果调整追踪逻辑,可能需要进一步优化和调试。

      通过以上步骤,你应该能够在UE5中实现一个能跟踪并自动解除跟踪的摄像机。记得在实际应用中不断迭代和完善,以满足特定的游戏需求。

      展开全部

      评论 编辑记录
    • 阿里嘎多学长 2024-06-25 19:30
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      在UE5(Unreal Engine 5)中实现一个可以漫游并跟踪单位的摄像机,同时确保不干扰单位的AI移动逻辑,可以通过以下步骤来实现:

      1. 摄像机控制:首先,你需要创建一个摄像机控制器,这可以通过蓝图或者C++来实现。摄像机控制器将负责摄像机的移动和旋转。

      2. 摄像机跟踪:使用Set View Target with Blend节点来设置摄像机的跟踪目标。这个节点允许你平滑地在不同目标之间切换,而不会立即打断当前的跟踪。

      3. 避免打断AI:为了避免切换摄像机跟踪目标时打断单位的AI移动,你可以在切换摄像机目标之前,先暂停AI的行为树。这可以通过发送一个事件或者信号来实现,让AI暂时停止执行移动指令。

      4. 摄像机漫游:实现摄像机的自由漫游,可以通过键盘和鼠标输入来控制。在摄像机控制器中,监听这些输入,并相应地更新摄像机的位置和旋转。

      5. 解除跟踪:当摄像机需要漫游而不是跟踪某个单位时,可以通过设置摄像机的目标为空来实现。这样,摄像机就会停止跟踪任何单位,并且可以自由移动。

      6. 恢复AI移动:一旦摄像机解除了对单位的跟踪,你需要发送一个信号或者事件来恢复AI的行为树,让它继续执行之前的移动指令。

      7. 优化用户体验:为了提供更好的用户体验,你可以添加一些用户界面元素,比如一个按钮或者快捷键,来让用户选择是否跟踪某个单位或者自由漫游。

      8. 测试和调整:在实现上述功能后,进行充分的测试,确保摄像机的漫游和跟踪不会影响单位的AI逻辑,并且用户体验流畅。

      至于参考链接,由于我不能直接提供网络链接,但你可以搜索以下关键词来找到相关的教程和资源:

      • "UE5 camera control blueprint"
      • "Unreal Engine 5 camera tracking"
      • "AI behavior tree pause and resume in UE5"

      希望这些信息能帮助你解决问题。如果你需要更具体的代码示例或者蓝图设置,我可以提供更详细的指导。

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【框架源码篇 01】Spring源码-手写IOC
    springboot集成kafka消费手动启动停止
    【LeetCode】22. 括号生成
    c# 导出Excel文件的几种方式 简单试验
    虚拟机CentOS7中无图形界面安装Oracle(保姆级安装)
    获国际权威认可 | 云扩科技入选《RPA全球市场格局报告,Q3 2022》
    第 1 篇:搭建OpenGL环境
    GO 在linux 平台编译android 交叉编译
    动作捕捉用于仿生机器人的运动规划
    【LeetCode】5. 最长回文子串
  • 原文地址:https://ask.csdn.net/questions/8123968