本文主要是介绍【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”插件(需购买)
在场景中添加一个“TweenManagerActor”,这样我们就可以使用“TweenMaker”插件中的节点了
2. 复制一份“BP_Aircraft”,新蓝图就叫“BP_Aircraft_2”
打开“BP_Aircraft_2”,删除事件图表中的所有节点,删除所有变量,添加一个“CesiumGlobeAnchor”组件
新建一个变量,命名为“PreviousTrans”,类型为“变换”,勾选可编辑实例,该变量用于表示飞机在上一个点的位置和朝向
3. 将“BP_Aircraft_2”拖入视口
4. 打开关卡蓝图,在游戏刚开始运行时设置飞机的初始Transform
在关卡蓝图中添加如下变量,其中,“DeltaTime”表示采样点的采样时间间隔,这里设置为1s;“Index”表示当前是第几个采样点的索引;“Longitude”表示当前飞机的经度;“Latitude”表示纬度;“Height”表示当前飞机的高度。
继续在关卡蓝图中的事件图表添加如下节点,当我们按下N键时,先设置当前读取的表格行数索引为1(0是表头行),判断当前是否未完成读取表格的所有行,如果未读取完,就继续获取表格中每一行的经纬高
设置飞机的朝向:
添加如下节点(插件“TweenMaker”中的节点),其中,引脚“Tween Target”表示被移动的对象,“To”表示移动到的位置,“Duration”表示移动所需时间;输出引脚“On Tween End”是完成移动后才执行
移动完成后,首先把“Index”+1
然后判断是否需要设置CesiumGeoreference的Origin和CesiumSunSky的时区(判断当前飞机的经纬度和CesiumGeoreference的经纬度是否相差超过1,只要有一个超过1就重新设置CesiumGeoreference的Origin和CesiumSunSky的时区)
如果条件为假就更新一下飞机上一个点的位置
更新后继续获取表格中飞机下一个航线点的位置
这里将deltaTime设置为1s,一共625个点则总时长为625s,也就是近10分钟飞机就可以从旧金山飞到欧洲
参考视频:
https://www.bilibili.com/video/BV1Fm4y1p7cV/?spm_id_from=pageDriver&vd_source=36a3e35639c44bb339f59760641390a8
这篇关于【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!