[UE4学习笔记][VR]-射箭模拟-Day1

DAY1:Hello,大家好。从学习UE4到现在已经快一年了,在这一段时间内积累了大量的学习经验和一些学习笔记。最近,自己也在整理学到的东西,毕竟笔记多多少少需要多看才能记得深刻,日后看笔记也会有一些新的想法和思路。所以趁这次整理的机会,把自己觉得好的东西分享给大家 

这次给大家的学习笔记是VR射箭的项目。

首先给大家先提供一个思考的环境“如果让你从无到有设计一个VR射箭,应该怎么去做?或者从哪个方向下手?”

流程:环境搭建-思路想法-拉弓射箭逻辑流程-调试-修改BUG


  1. 环境搭建 
  • 创建一个新的工程文件 命名为 Vr_Shejian
  • 在工程文件里(简称工程),创建两个文件夹 一个Map(level) 一个Bp
  • 把Map 保存到 Map文件夹里 在Bp文件夹里 创建一个GameMod 命名为MyGameMod 创建一个Pawn 命名为MyPawn 。
  • 在World setting 里 GameMod 更改为自己创建的My Game Mod再继续把默认的Pawn 改为自己的MyPawn。
  • 导入 弓箭、手柄 模型在Content文件夹下
  • 在MyPawn里添加一个摄像机 两个motioncontroller 一个命名为LeftController 一个命名为RightController (这三个属于同一等级,都放置在根目录下)在两个controller下分别加两个Static Mesh (替换上手柄)
  • 需要变换左右手
  • 现在基础VR模板搭建已经完成了

  1. 思路逻辑
    接下来需要缕清我们的逻辑:“我们需要按下右手手柄上的Shoulder键 在右手上生成一个弓箭,在我们再按一次 Shoulder键时 弓箭会掉落。这里有两种处理方式 后面我会截图”

    在VrPawn里的蓝图
  • 这样写出来只是一个生成弓箭的蓝图,还没有达到我们的要求 所以我们需要再写 扔掉的蓝图,为了逻辑清楚 我们先写出DropArrow的自定义事件 后面继续完善。
  • (不用考虑下图中的变量 BP Arrow 后面会说到)

  • 现在我们两个事件都已经写完了
  • 现在就需要用按键来控制这两个事件的执行。
    在这里 有两种方法可以实现
  • 先说方法二,方法二比较简单,直接利用 门 节点就直接可以先生成弓箭,再按一次就会扔掉
  • 我们主要讲一下方法一

方法一利用的是 判断 (判断我们的手中是否有弓箭)

如果我们手中有弓箭 扔掉 如果我们手中没有弓箭 就生成。

所以我们需要一个变量(来记录我们手中到底有没有弓箭)这里我们就需要在 生成弓箭的节点里拉出一个变量 命名为(Bp Arrow)

  • 这样我们生成了一个弓箭之后,BpArrow就是有效的。在方法一中,有一个is valid 节点 用来判断BpArrow里是否有效 (如果变量里有东西就是有效,是空的就是无效)。

然后继续完善整个蓝图

注意1.在扔下弓箭的蓝图里 采用的是方法一,所以 使用方法二 可以不用加最后的SET变量。 2.无论用方法一还是用方法二,都需要提升变量(也就是在生成弓箭的时候所提升的变量),因为在放下弓箭的过程中,需要断开弓箭与手的链接,还需要使弓箭获得物理属性,我们就需要把弓箭的变量提取出来。

这一步很重要!


  • 第一阶段完整截图:

备注:弓箭蓝图截屏 (和子弹制作类似)


  • 第二阶段,扣动扳机键使 弓箭发射出去。和之前的思路一样。

扣动扳机键——Shoot  /   Shoot——写弓箭的蓝图

弓箭Shoot  需要先DetachFromActor 然后需要设置弓箭里面的 抛物线运动里的Activate,使用SetActive 然后再设置速度。如图所示

经过测试 弓射击需要加物理属性 经过修改

接下来要生成弓 在游戏开始的时候我们就需要把弓生成在我们的左手上

然后需要 在弓箭碰到弓的时候 让弓箭绑定到弓上

我们就需要在弓的蓝图里 添加一个碰撞

然后写蓝图绑定

现在绑定完成。
注意:之前射击操作中 忘记了一个判断,我们将判断我们的手上是否有弓箭。如果不加判断,会报错!


  1. 弓的拉伸动画
  • 下一步要做弓的拉伸动画

我们需要新建一个弓的动画蓝图。

  • 创建完成后,有一个逻辑需要理清

我们需要再弓的蓝图里 控制 弓绳子拉伸的距离, 但是具体的体现却是在弓的动画蓝图里实现的。所以我们需要一个介质来使得两个 蓝图里的距离产生关联。我们需要在弓的蓝图里新建一个Float变量,也需要在弓的动画蓝图里新建一个变量

(动画蓝图新建变量在左边varible 就可以直接添加变量)

两个变量在 动画蓝图里 实现了沟通 就可以直接控制一个变量来改变另一个变量。

现在两个变量已经设置好,现在实现两个变量之间的沟通

首先在弓的动画蓝图里,EventGraph 里

有一个新的节点叫Get Owning Actor (获得拥有的Actor)

按照节点的思路走,实时更新蓝图动作、转变为BP_Bow(调出BP_bow里的变量赋值到动画蓝图的变量里) 这样就实现了蓝图变量的沟通。

然后在动画蓝图里

新节点: Local Space Ref Pose

新节点:Transform(modify)Bone(注意右边的设置)Add to Existing 意思是在原本的基础上进行增减,而不是以原点的坐标。

然后把变量连接到Translation 里 因为拉弓只是X轴进行转变,所以只需要转变X轴的大小。

再设置一个大小值。现在拉弓的基本功能已经完毕。

 

 到现在为止我们的第一部分已经完成!
接下来就要完善+测试+调试啦

发表评论

电子邮件地址不会被公开。 必填项已用*标注