阿赵UE学习笔记目录
大家好,我是阿赵。
继续学习虚幻引擎的使用。这次来看看角色控制动画相关的东西,主要用到了动画蓝图和角色蓝图。
一、动画蓝图
之前分析过,蓝图对于虚幻引擎来说,是存在于各个系统里面的,相当于是各个系统的控制器。所以动画蓝图就是控制动画播放的一种控制器
1、创建动画蓝图
创建动画蓝图有2种方式:
1.通过骨骼网格体创建
在内容浏览器里,找到一个想控制动画的骨骼网格体,然后右键——创建——动画蓝图:
这样就会以这个骨骼为基础,创建一个动画蓝图文件。
2.通过创建选项创建
在文件浏览器里面,不选中任何文件,直接右键——动画——动画蓝图:
因为动画蓝图是必须和骨骼网格体绑定的,所以这时候会弹窗,让我们选择一个骨骼网格体:
创建好的动画蓝图文件,预览图就是选择的骨骼网格体,比如我这里选择的是钢铁侠的骨骼网格体:
2、编辑动画状态机
双击打开动画蓝图,会发现左边有预览窗口和各种可编辑的组件,中间是一个节点编辑器,右边是各种属性编辑面板,比如细节面板、动画预览编辑器和资产浏览器。
在中间的节点编辑区域,默认只有一个输出节点,我们鼠标右键,搜索状态机,新建一个State Machine节点:
这里我只打算给角色添加一个待机的状态机,先不做任何的动画状态切换,所以直接把状态机输出到Output Pose的Result接口:
接下来双击状态机节点,进入到状态机编辑:
会发现这里只有一个Entry节点,然后可以从右边的资产浏览器,把需要的动画拖进来。我这里拖入一个待机的动画,并把节点名称改成idle:
然后把Entry节点连到idle:
回到动画蓝图的窗口,这里需要注意一件事情,UE里面的所有蓝图,在修改完之后,都需要点击保存,然后点击编译按钮,才会真正的生效。
在编译之后,会发现左上角的预览窗口出现了刚才拖动进去的动画,然后中间的状态机和输出之间的连线动了起来,这是在告诉我们蓝图的节点运行情况。
二、角色蓝图
1、Actor的概念
在UE里面,所有能在场景里面显示的对象,都是一个Actor。这个概念有点像Unity里面的GameObject,但又有所不同。
Unity里面,一个GameObject显示在场景里面之后,如果需要控制它,还需要在GameObject上面挂一个继承了MonoBehaviour基类的C#脚本,然后想把它保存下来,还需要创建Prefab。但在UE里面,Actor就包含了Unity的GameObject+MonoBehaviour+Prefab的功能了。只要创建Actor,然后在Actor里面可以编辑模型、动画甚至功能逻辑。然后把Actor本身就是一个资源,可以直接反复的拖动到场景里面使用。
2、创建角色蓝图
在内容浏览器里右键——蓝图类
接下来会弹出窗口,让我们选择这个蓝图类的父类:
可以看到,UE内置了非常多的带有功能性的蓝图类,最基础的是Actor,然后其他的不同蓝图类会自带有各种不同的基础功能。
我们可以通过创建最基础的Actor类,然后自己扩展功能,也可以直接使用一些UE已经带有的类来简化开发过程。比如这次我选择的角色类蓝图,里面就包含了角色控制相关的逻辑功能在里面了。
创建完的角色蓝图类,暂时是空白的,给它起个名字:
3、指定骨骼网格体和动画
双击打开之后,会发现中间有一个胶囊体,还有一个指示方向的箭头。左变是各种组件和函数,右边是细节面板。
在细节面板,把钢铁侠的骨骼网格体拖动到网格体的选项里,会发现有一个钢铁侠的模型出现在胶囊体的上面
不过这个时候钢铁侠和胶囊体并不是重合的,可以通过调整钢铁侠的位置,还有调整胶囊体的大小,让模型和胶囊体匹配:
再旋转网格体,让方向和箭头一致:
在细节面板找到动画——动画类,把刚刚做好的动画蓝图指定在这里:
这个时候,角色动画已经生效了,编译完成后,角色蓝图中间就出现了刚才做的动画蓝图里面指定的待机动画:
4、添加摄像机
假如我们是要做一个第三人称射击游戏,需要一个摄像机跟随着角色后,可以这样做,在组件页签里面,点添加,搜索弹簧臂组件。弹簧臂的作用类在截图里面有说明,类似于一个第三人称摄像机的控制距离功能:
再在创建出来的弹簧臂组里面创建一个摄像机组件:
创建完之后,会是这样:
然后调整一下弹簧臂的位置,让摄像机看着角色后脑勺:
5、设置默认玩家控制:
在角色蓝图的细节面板,找到Pawn——自动控制玩家选项:
默认的选项是已禁用,这里选择成玩家0:
保存并编译蓝图,把这个角色蓝图拖动到地形场景里面,然后运行,会发现游戏的视角已经变成了第三人称,看着钢铁侠的背后: