欢迎光临散文网 会员登陆 & 注册

Blender To UE5 塔防 002

2023-03-21 19:41 作者:新知都名  | 我要投稿

一个半小时的时间,知识量太大了,对于我这个小白来,脑子已经完全饱和。

实例,学起来优点就是有意思。驱动力强,但是费脑子,发型也往强者这边更近一步。


03:17



本节课目标:基础的防御塔蓝图搭建,防御塔具有攻击能力。


----------给Actor塔添加一个spawn动画并尝试炮筒旋转和Fire------------------------------


-----------------一、给Actor塔添加一个spawn动画---------------------

整体思路:

  1. 首先创建一个Actor塔的父类
  2. 再创建一个动画蓝图类,可以播放动画序列
  3. 在塔的父类蓝图中设置条件,和蓝图动画之间通信,控制状态机,实现播放哪个动画序列;
  • 几个状态分析
  • start
  • spawn
  • idle
  • Idle 就是一帧动画,也没有呼吸,所以这里完全可以不用状态机,直接序列动画播放spawn。但是,UP可能考虑的是让课程内容更丰富。

具体步骤:


05:52


创建一个Acor命名为BP_Defence_Patent,

  • 添加一个骨骼体组件,命名为SpawnMesh
  • 在组件细节面板中,添加骨骼;
  • 并把Actor放到关卡中,没有spawn动画
  • 下面给Actor添加spawn动画


08:30


在Animation文件夹种创建Anim(动画蓝图)

  • 添加TowerBaseSK_Skeleton
  • 命名为ABP_Tower

在AnimGraph中,添加一个动画序列,看一下效果。


09:53


没有反应,我们还需要给蓝图中指定播放哪个蓝图动画。

指定完成,就可以正常播放动画了。

但是,对于Actor(ABP_Tower)来说,有很多动画,例如:攻击时候的攻击动画、Idle动画等。

所以,先建一个变量来告诉动画蓝图Spawn动画是否播放完成,这样状态机就可以依据来判断播放哪个动画了。

创建布尔变量IsSpawned?


12:17


创建一个状态机,命名为Tower State Machine;

  • 状态机可以根据条件来播放哪个动画序列。
  • 三个状态,Start,Spawn,Idle
  • 在三个状态中,添加动画序列


下面,就开始设置条件:


14:53


  • 在动画蓝ABP_Tower图中,获取Actor;
  • cast to 塔的父类(BP_Defence_Patent)
  • 得到蓝图中的变量来判断spawn的动画是否播放完成
  • 如果完成,则进入idle
  • 没有,则继续播放Spawn动画
  • spawn到idle规则
  • 利用的一个剩余时间(比率)的节点


----------------------------------二、实现炮筒旋转动画--------------------


18:54


1、攻击时候的炮基,


19:11

,并命名为TowerBase

  • Spawn完成之后,切换可视性后隐藏;
  • TowerBase设置为隐藏,切换可视性后显示;

2、攻击时候的炮筒,


21:03

,并命名为CannonMesh

  • 添加TowerBaseCanno骨骼网格体
  • 对于骨骼网格体来说很重要的一件事别忘了:
  • 动画模式
  • 动画类
  • 也设置为隐藏,切换可视性后显示;
  • 然后添加蒙太奇

3、实现炮筒单独旋转的蓝图设置

  • 添加一个时间轴
    
    25:58
    
  • 长度设置为1;
  • 轨道命名为TurnRate;



24:20



----------------------------------三、实现开火的动画--------------------

开关动画的重复的动作,所以使用蒙太奇。

问题来了,如何创建蒙太奇,使用蒙太奇;

1、创建蒙太奇


29:57


  • 视频中直接选择一个动画序列
  • 右键——创建——创建蒙太奇
  • 并改名为Tower BaseAnimAtk_Montage

2、播放蒙太奇的节点


30:53


  • 骨骼——炮筒
  • 资产选择——刚刚创建蒙太奇

3、蒙太奇的调用播放是动画蓝图中设置;

  • slot搜索节点
  • 相对于在动画蓝图中放置了一个插槽(slot)
  • 然后,如果Actor蓝图中就利用节点来控制播放了(步骤2)


33:01


  • 1、对于骨骼网格体来说很重要的一件事别忘了:
  • 动画模式
  • 动画类
  • 2、在动画蓝图中slot节点


----------下面让Tower搜索敌人并鉴别出离着最近的敌人-----------------------------


34:16


先用蓝图做,后面会用行为树做!



36:38


创建一个Character作为敌人,命名为BP_TDEnemy_Parent

  • 添加骨骼SK_Mannequin
  • 添加动画蓝图


  • 搜索敌人。在BP_Defence_Patent中蓝图中
  • 添加对Object进行多球体追踪
  • 创建一个浮点变量AtickDistance,1000;
  • 对象类型
  • 是之前,设置好的
  • 
    39:30
    




40:14


进入敌人的蓝图,设置胶囊碰撞设置:

  • 碰撞预设——Custom;
  • 对象类型——Enemy;(设置好的)
  • 碰撞相应设置:


在BP_Defence_Patent中继续编辑蓝图


-------------获取离着最近的敌人---------------------------


42:36


一、判断碰撞是否成功,成功的放置到数组中


43:06


  • 首先利用节点多球体追踪判断是否成功
  • 成功的话,就For Each Loop
  • cast to BP_TDEnemy_Parent
  • Add Larry
  • 提升变量,命名为EnemyFindArray

二、判断哪个敌人离着目的地最近


45:08


准备工作:

  • 创建一个函数,命名为:GetEnemyNearToBase;
  • 创建一个Acor——Base,也就是敌人的目的地;
  • 在BP_Defence_Patent蓝图中获取Base,得到Base的引用
    
    47:07
    


48:22


变量归类,这技巧太实用。可以捋捋变量


所有准备工作做好之后,现在就可以判断哪个敌人离着最近了


49:15



根据的敌人的位置,来让炮筒旋转,朝向敌人


56:29


让敌人AI移动


58:38


  • 用到节点AI MoveTo
  • 追踪对象,利用节点获取类的所有Actor,获取到BPBase(目的地的actor)
  • ue5地图自带导航,按键P就可以看到绿色的导航区域
  • 如果没有话,可以自己添加NavMeshBoundsVolume


修改移动速度



01:01:46


可能就是执行一次,所以设置一个条件,只要没有得到有效值就一直执行函数Search

为啥要delay时间呢?这样的话,再次执行search的时候,就会在0.2s之后又执行一次。


01:04:14


但是在这次又设置一个条件,这个条件设置错误了,up主在后面视频也进行了修改。

判断数组的长度应该>=0,而不是判断是否==0!


后面学习up如何debug,借鉴一下思路!!


01:07:11




01:13:46


让炮筒持续瞄准敌人!!



01:16:23


set time by event提升为变量,这个变量类型为定时器柄;

作用是啥呢?结合后面的内容,猜想,这个变量就是这个定时器的引用。


01:17:52


新建一个变量,属于游戏中的变量,

  • 再Attack函数中,设置IsAttacking为真;
  • 然后作为Aim(瞄准事件)的条件

但是,这变量的作用是什么呢?


01:19:00




01:20:38


  • 在敌人的蓝图中,新建一个变量I是Dead?
  • 来判断敌人是否死亡,
  • 如果死亡,重新Search;
  • 如果死亡,就清除定时器,也就是不再瞄准和继续攻击;
  • AimHandle(定时器手柄)这个定时器的引用。


01:25:16






Blender To UE5 塔防 002的评论 (共 条)

分享到微博请遵守国家法律