由我个人所接触的项目来看,基于UE4的室内框架主要分成两个方向,一种是VR的操作方式,另一种是传统的鼠标操作模式,虽然部分核心逻辑变化不大,但这两种模式在架构上有比较大的出入。
原因1是UE4在4.15后加入了原生的VR支持,在早先的版本中对于3D widget并不能直接做射线操作,因此需要额外的插件或深入底层写针对widget component的VR交互扩展。并且扩展后的插件和代码也不容易移植到新版本的引擎上。
原因2是不论VIVE还是Oculus,手柄的VR交互和鼠标的交互不同,手柄是基于位于Player Character中的LR Controller组件进行操作的,而鼠标相关的逻辑则主要靠Player Controller进行控制。导致相关需求和逻辑需要进行重新评估。同时HMD并不能显示HUD,所以传统使用HUD进行显示的逻辑也必须重新设计。
在这里主要写核心业务逻辑的设计思路,因此使用了传统鼠标的交互方式,Input部分只用传统的按键映射来进行,而对于基于UE4进行VR室内项目的开发者,可以将Input部分根据需求使用LR Controller组件的OnComponentBegin/EndOverlap事件来替代按键映射进行交互判定。并且将本文中出现的Get Hit Result Under Cursor By Channel函数替换成Line Trace By Channel函数。并根据需求进行修改。
在这个例子中,我们需要完成以下多个需求。
1,自适应UI,动态生成家具按钮,并且自动排列对齐。
2,鼠标点击按钮进行交互,放置家具到场景中。
3,根据鼠标指向,即时调整家具位置。
4,自动吸附其他家具,智能判断可以被放置的家具类型和位置。
5,根据不同家具类型进行交互。