VR天文馆
VR天文馆
鲸拓工作室视频教程已同步发布至B站:https://www.bilibili.com/video/BV1v8411C7Cv
环境搭建
贴图与材质
首先导入如下贴图
首先看地球的材质
其中下面多出的一块逻辑是让星球上的灯光更真实(白天的地区无灯,黑夜的地区亮灯)
核心思路是导入灯光贴图,通过计算光照与顶点法线之间的点积(两个向量越接近,点积越大;向量垂直则点积为0),控制自发光强度
然后其他几个星球的材质就比较容易了,这里就不再一一介绍,大家看图就好
放置模型
创建三个Actor如下
另外两个是空的,Planet 里面实现了自转逻辑
把这些贴图应用到模型上,这些模型都继承自 Planet
这里以地球为例,都是一样的,就不一一截图了
将这些模型按照如下位置放到场景里
DirectionalLight 按照自己的喜好调整光强就好
后期处理体积需要打开手动曝光和 Infinite Extent
天空球需要指定 Static Mesh 和 Materials
这个 M_Sky_Stars_Mat 的逻辑如下,也是基于我们自己导入的贴图,让场景里多一些星星
星球组
EarthAndMoon
打开上面创建的 EarthAndMoon 蓝图,添加两个 ChildActor,然后指定地球和月球,并摆放他们两的位置
PlanetsGroup
打开 PlanetsGroup 蓝图,创建四个 ChildActor,将其他星球添加进来,按照自己的喜好调整布局就好
旋转逻辑
这里为了方便调试,同时启动键盘调试,按下空格键的时候就旋转起来
首先在开始运行的时候启动输入,然后将所有的星球存入一个数组里
在触发按钮的时候,先确定方向,同时做一些校验(如果正在旋转,被锁定,缩放中,就禁止旋转)
下面是索引的计算逻辑,确定旋转之后,是哪一颗星球在我们面前(这里面有一段UI卡片逻辑可以先不管)
最后利用时间线开始旋转,最后复位状态
我的时间线如下
缩放逻辑
缩放逻辑也是类似,先校验状态
然后根据时间线来缩放当前星球(里面也有一些关于卡片透明度的逻辑,别急,就在下面了)
学习卡片
首先导入如下学习卡片和对应教学音频(没有工程文件的可以自己做一些卡片,都差不多)
然后创建下面四个 Widget,这里以地球为例,其他都一样的
打开 Earth_Knowledage_Widget,把卡片和图标拖进来
设置按钮点击事件(注意是Press),点击音频的时候先停播其他音频,然后播放对应音频
其他几个星球的 Widget 也是类似,这里不一一复制
接下来创建一个 PlantWidget,通过 WidgetSwitcher 将其他几个 widget都串起来
然后在这里添加一个 SetOpacity 自定义事件,用于设置卡片的透明度
最后创建一个 PlanetWidget 的 Actor
补上激活索引和设置透明度这两个事件
到这里就基本完成了,最后把旋转和缩放逻辑里对应的卡片逻辑补上就好(以防万一这里还是再截图一遍)
环境配置
最后别忘了去 VRPawn 里加一个 WidgetInteraction
上面逻辑创建好之后就放入场景里,按照喜好随意摆放就可以了