【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)

遗留问题 

        在上一篇博客中(【UE5 Cesium】18-Cesium for Unreal 建立飞行跟踪器(3)),我们实现了飞机变速飞行的功能,但是还存在两个问题,分别是:

        (1)由于UE的坐标系的方向与地理坐标系的方向不相符,飞机飞行一段时间后会出现飞机斜着飞的情况

        (2)由于CesiumSunSky一直没有改变,因此飞机飞的比较远时会出现黑夜

解决思路

        (1)CesiumGeoreference 的 Origin 必须变化,否则UE坐标的方向与地理坐标不一致 (可Lat或Long变化超过1度时重设

        (2)BP_Aircraft 必须加上Cesium Globe Anchor组件,否则CesiumGeoreference变化的话,无法保证它的位置正确

        (3)CesiumSunSky要根据经纬度设置下时区,否则有黑夜区间(时区=经度/1)

        (4)用TweenMaker插件来处理DeltaTime时间内的移动(不买插件的话,自己写个类似的函数也是可以的)

        (5)要处理DeltaTime时间内的物体的转向问题,即让机头一直朝着飞行前进的方向

步骤

1. 在虚幻引擎中启用“TweenMaker”插件(需购买)

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第1张图片

在场景中添加一个“TweenManagerActor”,这样我们就可以使用“TweenMaker”插件中的节点了

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第2张图片

2. 复制一份“BP_Aircraft”,新蓝图就叫“BP_Aircraft_2”

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第3张图片

打开“BP_Aircraft_2”,删除事件图表中的所有节点,删除所有变量,添加一个“CesiumGlobeAnchor”组件

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第4张图片

新建一个变量,命名为“PreviousTrans”,类型为“变换”,勾选可编辑实例,该变量用于表示飞机在上一个点的位置和朝向

3. 将“BP_Aircraft_2”拖入视口

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第5张图片

4. 打开关卡蓝图,在游戏刚开始运行时设置飞机的初始Transform

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第6张图片

在关卡蓝图中添加如下变量,其中,“DeltaTime”表示采样点的采样时间间隔,这里设置为1s;“Index”表示当前是第几个采样点的索引;“Longitude”表示当前飞机的经度;“Latitude”表示纬度;“Height”表示当前飞机的高度。

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第7张图片

继续在关卡蓝图中的事件图表添加如下节点,当我们按下N键时,先设置当前读取的表格行数索引为1(0是表头行),判断当前是否未完成读取表格的所有行,如果未读取完,就继续获取表格中每一行的经纬高

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第8张图片

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第9张图片

设置飞机的朝向:

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第10张图片

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第11张图片

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第12张图片

添加如下节点(插件“TweenMaker”中的节点),其中,引脚“Tween Target”表示被移动的对象,“To”表示移动到的位置,“Duration”表示移动所需时间;输出引脚“On Tween End”是完成移动后才执行

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第13张图片

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第14张图片

移动完成后,首先把“Index”+1

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第15张图片

然后判断是否需要设置CesiumGeoreference的Origin和CesiumSunSky的时区(判断当前飞机的经纬度和CesiumGeoreference的经纬度是否相差超过1,只要有一个超过1就重新设置CesiumGeoreference的Origin和CesiumSunSky的时区)

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第16张图片

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第17张图片

如果条件为假就更新一下飞机上一个点的位置

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第18张图片

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第19张图片

更新后继续获取表格中飞机下一个航线点的位置

【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)_第20张图片

这里将deltaTime设置为1s,一共625个点则总时长为625s,也就是近10分钟飞机就可以从旧金山飞到欧洲

参考视频:

https://www.bilibili.com/video/BV1Fm4y1p7cV/?spm_id_from=pageDriver&vd_source=36a3e35639c44bb339f59760641390a8

你可能感兴趣的:(虚幻5,ue5,cesium)