(七)Cesium for Unreal创建航班追踪器(译) - 3DforFun的文章 - 知乎 https://zhuanlan.zhihu.com/p/375083272
上述链接为Cesium for Unreal创建航班追踪器的教程,个人就是根据这个教程来做的,中间遇到过不少的问题,幸运的是一一解决了,在这里做一下总结,也和有同样兴趣的人做一下分享。
在教程第二步:添加PlaneTrack类->3 部分 添加下述头文件时,程序会报错。
// 添加头文件引用。确保在PlaneTrack.generated.h代码之前(否则会导致编译错误)
#include "Components/SplineComponent.h"
#include "CesiumGeoreference.h"
#include "Engine/DataTable.h"
需要你自己逐个找到头文件所在的目录,把相关目录添加到VC++目录-包含目录中,做完上述操作,一般报错就会消失。
glm::dvec3 UECoords =
this->CesiumGeoreference->TransformLongitudeLatitudeHeightToUe(
glm::dvec3(PointLongitude, PointLatitude, PointHeight));
上述代码中的TransformLongitudeLatitudeHeightToUe函数已更新为TransformLongitudeLatitudeHeightToUnreal函数,所以正确的代码应该是下面所示:
//计算UE里的坐标
glm::dvec3 UECoords =
this->CesiumGeoreference->TransformLongitudeLatitudeHeightToUnreal(
glm::dvec3(PointLongitude, PointLatitude, PointHeight));
const glm::dmat4& ecefToUnreal =
this->CesiumGeoreference->GetEllipsoidCenteredToUnrealWorldTransform();
glm::dvec4 unrealUp = ecefToUnreal * ecefUp;
代码中的GetEllipsoidCenteredToUnrealWorldTransform函数已经没有了,取而代之的是
glm::dvec4 unrealUp =
_geoTransforms.GetEllipsoidCenteredToAbsoluteUnrealWorldTransform() * ecefUp;
具体参看链接: http://t.csdn.cn/JosZn
在完成教程中的步骤后,测试编译-运行,发现自己的结果很诡异:
飞机不停的闪烁,这是运行时的截图。
最后发现问题在这里
不应该是,Duration/1,应该是1/Duration。
因为该函数中上方的引脚是A引脚,下方的引脚是B引脚,所以Duration的值应该连接到B引脚,A的值更改为1.0:
注意:float/float函数的针脚的数值可以直接更改。
完成上述设置,飞机就可以沿航线移动了。
解决了上述问题后,飞机沿航线移动如图所示:
飞机机头指向航向的垂直方向。这是明显不正常的。
我尝试着对BP_Craft actor的姿态进行调整(如下图红框中所示)
或者对PlaneTrack进行调试,最终发现都没有效果。
最后,在一位高人的指点下终于明白,需要在静态网格体(StaticMeshComponent)层面进行调整。如下图所示:
调整完毕,如果没有异常情况,飞机就会沿着航线飞行了。