首页 > 解决方案 > 如何在虚幻引擎中正确使用 C++ 函数?

问题描述

我正在尝试通过以下行使用此 ProjectPointToNavigation :

bool navResult = GetWorld()->GetNavigationSystem()->ProjectPointToNavigation(HitResult.Location, NavLocation, TeleportFadeTimeExtent);

但是,此功能ProjectPointToNavigation已弃用该方法

我的问题是,如何重新编写上面的代码以使用最新的ProjectPointToNavigation功能?

我尝试了以下方法:

 bool navResult = UNavigationSystemV1::ProjectPointToNavigation(HitResult.Location, NavLocation, TeleportFadeTimeExtent);

上面的代码向我显示了以下错误:

'UNavigationSystemV1::ProjectPointToNavigation' 对重载函数的模糊调用

抱歉,如果我的问题很简单,我是 Unreal Engine 的新手,仍在学习它的开发(在我的第一阶段)

更新:

我尝试了以下(在header课堂上):

UPROPERTY()
class UNavigationSystemV1* NavSystem;

.cpp课堂上:

bool navResult = NavSystem->ProjectPointToNavigation(HitResult.Location, NavLocation, TeleportFadeTimeExtent);

它仍然没有工作,我收到以下错误:

严重性代码 描述 项目文件行抑制状态错误 LNK2019 无法解析的外部符号“__declspec(dllimport) public: bool __cdecl UNNavigationSystemV1::ProjectPointToNavigation(struct FVector const &,struct FNavLocation &,struct FVector const &,struct FNavAgentProperties const *,class TSharedPtr)” (__imp_?ProjectPointToNavigation@UNavigationSystemV1@@QEAA_NAEBUFVector@@AEAUFNavLocation@@0PEBUFNavAgentProperties@@V?$TSharedPtr@$$CBUFNavigationQueryFilter@@$00@@@Z) 在函数“private: void __cdecl AVRCharacter::UpdateDestinationMarker(void)”中引用( ?UpdateDestinationMarker@AVRCharacter@@AEAAXXZ) 资源管理器 E:\Unreal Projects\Explorer\Intermediate\ProjectFiles\VRCharacter.cpp.obj 1

任何指导将不胜感激

标签: c++unreal-engine4

解决方案


在你的<Project Name>.Build.cs文件中,PublicDependencyModuleNames应该已经NavigationSystem添加了。这将纠正您的链接器错误。

关于访问导航系统指针本身,即使您让代码正常工作,它也会崩溃,因为当您访问NavSystem它时它将为空。

而是调用以下命令来获取指向新导航系统和项目的指针:

const UNavigationSystemV1* navSystem = NavigationSystem::GetCurrent<UNavigationSystemV1>(this);
bool navResult = navSystem->ProjectPointToNavigation(HitResult.Location, 
  NavLocation, TeleportFadeTimeExtent);

你需要#include "NavigationSystem.h"在你的实现文件的顶部。


推荐阅读