UE4开发踩坑记录

本文介绍了在Unreal Engine中处理对象旋转控制和编译链接问题的解决方案。对于APawn对象旋转,应使用APlayerController的SetControlRotation方法避免被重置。遇到编译链接错误时,可能是模块导出宏不一致,需检查并修正。当不同模块间引用类时,避免直接包含头文件,而是采用指针类型,并在cpp文件中包含相应头文件。模板类跨模块调用导致的链接错误,可以通过将模板函数定义与声明放在同一头文件中或在主文件中同时包含头文件和cpp文件来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、APawn对象旋转控制不能直接用SetActorRotation,而应该用

        APlayerController* PlayerController = UGameplayStatics::GetPlayerController(this, 0);
        if (PlayerController)
        {
            PlayerController->SetControlRotation(CurRot);
        }

否则APlayerController有时会重新将APwan的旋转角度再调整回来

2、编译出现链接错误

1>D:/UnrealEngine427/......: error C4273: “?????:?????”: dll 链接不一致
1>D:\UnrealEngine427\......: note: 参见“{ctor}”的前一个定义

可能是因为Module的导出宏出错,需要检查导出宏是否为本Module

3、Module引用错误

如果一个B Module引用了另一个A Module中的类,在头文件中#include AAA.h

AAA.h为另一个A Module的头文件,BModule编译链接一般没有问题,但是如果C Module引用B Module一般会出现AAA.generate.h找不到的错误,主要原因是C不会去找A的UBT路径

解决办法是不要在采用前置声明,然后在cpp文件中#include相应的头文件,因此在CModule中引用B Module的类作为成员变量应该定义为指针类型,而非直接定位为对象或结构体。

3、使用模板类跨Module调用,链接出现 error LNK2019: 无法解析的外部符号

原因在于模板类和模板函数在使用的时候才会被实例化。当模板被使用时,编译器需要函数所有的实现代码,来用合适的类型(模板参数)去构建正确的函数。但是如果将函数实现在单独的源文件中,这些文件是不可见的,因而会出错。

解决方案:

1、把类模板中成员函数的声明和定义都放在类的定义中(.h文件),不要分开就行。
2、在主文件(main文件)中既包含类模板的声明文件(接口文件)(.h文件),同时也包含类模板的实现文件(.cpp文件)就行了。

3、在类的定义中(.h文件)的最后包含类模板的实现文件(.cpp文件)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山中涛大爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值