UE4蓝图制作VR漫游

来源:互联网 发布:义乌淘宝美工培训学校 编辑:程序博客网 时间:2024/05/16 17:11

1.新建打开场景 新建文件夹BluePrint & Maps  Blueprint下创建GameMode文件夹  在GameMode文件夹下选择 Blueprint Class  点击GameMode Base 

2.找到setting 下 Word setting  找到Game  Mode 替换GameMode 。在DefaultPawnClass 右边选择+  CreateNewPawn  在Blueprint文件夹下新建文件夹  创建角色类

3. 打开角色类,Add一个Scene  在Scene下添加一个摄像机  右边属性有一个Look to Amd 默认属性为true ,意思 是摄像机和头显绑定到一起的。然后再添加两个运动控制器, MotonController 一个为左手一个为右手 修改右手的MotonController选项 为Right   然后添加显示手柄 显示引擎目录  Engine Content --》VREditor ---》Devices---》Vice   选择手柄 然后返回角色控制类 添加在左右手的下面。然后  Engine Content --》VREditor ---》Devices---》Generic 下面找到头显示 然后也添加到角色类 放置在摄像机的下面。 返回角色类根节点,找到 Actor属性 下的Spawn Colision Handing Method 选项选择 选择Always Spawn Ignore Colisions  然后重启 项目工程

4.手柄的按键反馈  方法1>在Blueprint文件夹下创建一个新的文件夹Controller   右键新建Miscellaneous 找到ForceFeedBackEffect  创建两个反馈 打开设置左右手 和振动强度和持续时间。 找到角色类 选择EventGraph   绘制蓝图 先获取控制器 GetPlayerController 接着绘制 调用ClientPlayForceFeedback   在ForceFeedbackEffect选择左右手 。然后连接 EventBeginPlay连接   方法 2>   GetPlayerController 绘制PlayDynamicForceFeedback  填写振动等级和时间 和左右手 然后连接在EventBeginPlay 开始的时候让振动 

5.按键绑定 接着在角色类中添加 Motion Controller(L)/(R)Trigger  左右扳机按键,或者在项目设置中的Input中绑定 。下图就是thc vive和ue4按键


6.基本交互 在Engine Content 引擎目录下找到StaticMesh 拷贝一份小球 到 在根目录下创建StaticMesh文件夹 下。选中小球 右键单击 选中CreateDestructibleMesh 创建可毁坏物体 打开后随便填写参数  保存 。 在根目录下创建 Materials 文件夹 右键点击BluePrintClass 创建Actor  然后添加破碎物体 搜索 De... 添加  添加一个球形的Collision放在坐手柄下,把小球调到手柄前方调整碰撞大小 ,如果要用这个小球检测碰撞,选择小球 最先的属性OnComponentBeginOverlap  因为我没做的是只需要抓取小球的材质所以要类型转换 在OtherActor下绘制Cast To(刚刚创建的小球的名字)    选择As..(刚刚小球的名字 ) 绘制 新建 Material Object  ,然后添加 按键绑定 MotionController(L)Trigger 绘制IsValid (//表示该对象是否实例化)下面链接 MaterialObject  再次绘制MaterialObject  ——》AttachToComponent  链接在IsValid   Parent属性上链接另一个小球。 ScaleRule (缩放) 改为KeepWord  保存 现在就能实现物体(小球)的抓取 松开也是一样 链接MaterialObject IsValid  MaterialObject 再次绘制 DetachFromConent  属性全部改为 KeepWord  然后 在转换的节点下 绘制 SetSimualatePhySics  然后 Simulate(选项为true) 就实现松开鼠标 仍小小球  

7.材质替换  找到StaticMesh文件夹下的 进入蓝图 选择De..() 右边属性下的OnComponent Hit  碰撞 事件(碰撞后让他替换材质) 点击进入

在 OtherComp绘制  CastToStaticMeshComponent 然后再这个下面找到As StaticMeshComponent  下绘制  SetMaterial 。

然后 在As StaticMeshComponent 下再绘制GetMaterial ,然后ForEachLoop ReturnValue数组,然后ArraIndex 连接  ElerentIndex 。

然后 吧小球的破坏 拖回来 绘制 GetMaterials 接着绘制Get (0) 连接SetMaterial 下的Material  。然后选中破碎物体 找到Collision  把 SimulationGenerates Hit Ecents 打上对勾(true)。 然后导入初学者内容的包。找到需要的材质 添加在 可破坏的小球上 多复制几个小球。继承至第一个小球。   然后再SetMaterial后面绘制 Delay 设置为1 后面接着绘制 DestroyActor 。。。保存

8.实现移动漫游;  在有手下添加一个圆柱   添加一个发光材质  创建打开点击键盘3+鼠标左键 制作发光材质连接在自发光, 然后创建标记点 Blueprint Class  选择Actor   在Scene下创建一个StaticMesh 。  创建一个圆锥体 。然后回到角色类添加 ChildActor右边指定一下 刚才那个圆锥体,  然后开始绘制蓝图 ,找到右手手柄的Trigger  和激光  如果扳机摁下的时候显示激光 否则隐藏掉 通过 SetVisibility   摁下的时候  让NewVisibility为true PropagatetoChidren为fals    否则 全部为false  然后把 标记点的圆锥也添加上去 。。。然后添加两个SphereCollision 一个是射线的开始一个是射线的结束  然后再 EventTick事件上绘制蓝图 LienTraceByChannel  然后 吧射线的开始和结束都放在start和end上

因为射线比较耗性能 所以添加一个bool开关 在摁下右手扳机的时候让他为true否则为false 然后再绘制射线的时候 摁B加鼠标左键get到那个开关。 然后把 Out Hit  Break 出来  然后再加一个开关摁B加鼠标左键  连接Return Vaule   。然后连接目标的 设置目标点 连接ImpactPoint 

 。。。然后 找到松开扳机 吧Scene get下来设置目标点   在 ImpactPoint绘制一个变量设置值 然后get到右手松开后 Scene的位置 这时候 位置 会有偏差。 然后获取HMD到角色的偏移  GetTrackedDevicePositionandOrientation  然后那最终想要的位置减去偏移量  连接New Location ,这时候发现移动的位置对了但是z轴不对 然后让z轴增加一个单位  如图所示 


其次还要看法线是否为1  然后先把Break HitResult下的 Normal Break开 然后看他的Z轴是否等于1 增加一个开关到 目标点位置的前面 连接开关条件  如果为false 不显示任何东西   如果都正确在设置的位置点后增加一个 目标点让他显示出来 ,在开始的时候让目标点隐藏 EventBeginPlay 下SetVisibility   让他隐藏

9.项目的打包; 该设置的设置一下  然后设置一下打包的地图 Project--Packaging 下面找到地图的列表 Lis to fmaps to include in a packaged buld +你要打包的地图。。  打开蓝图 在EventBeginPlay下设置为Enable HMD  再次绘制Execute ConsoleCommand  设置 Command r.screenpercentage 200 设置屏幕分辨率

原创粉丝点击