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

Unity学习笔记 Vol.70 使用动画绑定(Animation Rigging)制作程序化的角色动画

2020-09-01 08:28 作者:NXL2  | 我要投稿

摘要

    这节,我们接着上一节继续研究动画绑定的内容。详细教程请参考官方视频。


教程

    我们将学习如何使用动画绑定(Animation  Rigging)包,为人物添加动画 ,使用人物更具动态,使骨架能程序化地查看周围、看看关注点。场景中有两个人物,他们都带有骨架和闲置动画,我们希望两人闲置时可以到处看,让人物更有生气、更加有趣。我们可通过制作额外的动画剪辑、切换动画来实现,不过还有个更简单的方法。

    其实,我们可使用动画绑定(Animaiton Rigging)工具来控制人物的身体部位,在播放闲置动画的同时,叠加上头部的位置变化。首先,我们需要在Package Manager中,将动画绑定(Animation Rigging)包安装到项目中。维京人已经会到处看了,但弓箭手还是只盯着一个方向,那么我们先让弓箭手在站着的时候能往四处看。

    我们首先需要为人物装好动画绑定(Rigging)工具,在人物根对象上添加Rig Builder组件,为了方便使用骨架,我们可以添加Bone Renderer脚本和骨骼的Transform来可视化骨架。

    新建一个头部骨架(Head Rig),添加到Rig Builder中。

    关于使用动画绑定(Animation Rigging)制作人物骨架的更多信息。可查看此前制作的基础知识教学,上一节有相关的内容。

    接着,我们需要控制头部的转向,可使用Multi-Aim Constraint组件实现,Mullti-Aim  Constraint组件,可以让游戏对象转向场景中特定的点。

    在骨架中,新建游戏对象,称为Head Aim,添加Multi-Aim Constraint组件。

    在Aim的Transform中新加一个游戏对象,称为AimTarget,将其稍微拖到人物的前方,再添加一个效果器,来可视化目标位置。

    在Multi-Aim Constraint组件中,将人物骨架的头部Transform拖入作为Constrainted Object。

    将Aim Axis设为前方向,即在下拉菜单中选择z,接着,将AimTarget设为源对象(Source Object),让HeadTarget看到AimTarget。

    现在进入Play模式,四处拖动Aim Target对象,闲置动画依旧会在人物上播放,头部则同时会向着AimTarget转动。现在我们能控制人物闲置时的视线位置了,你可以通过为目标添加动画,来制作简单的头部动画。

    但我已经编写了一个闲置动画控制脚本,可随时间推移随机移动目标位置,这下头部每秒就会随机转动,为人物添加更多生气,动画已经很不错了,但人物的眼睛仍旧是静止的,如果能让眼睛独立于头部运动,人物可以更加活灵活现。

    在骨架中新建游戏对象,称为 Eye Aim,在其中为每只眼添加游戏对象,接着为左眼添加Multi-Aim  Constraint组件,将人物骨架中的左眼设为Constraint Object,将Aim Axis设为z,将头部的Aim Target设为Source Object。

    右眼的操作相同,不过Aim Axis需要设为z,这时播放场景并没有什么变化,这是因为眼睛和头部的IK权重是相同的,两者在跟踪目标时的移动距离是相同的。

    不过,如果我们选中头部游戏对象,在检视器中更改权重,注意头部回到了闲置位置,而眼睛依旧会锁定 Aim Target四处转动,如果将权重设为0.755,头部依旧会向Aim Target移动,但速度要比眼睛慢得多,这种效果虽然不起眼,但可以为人物多添加一点生气。另一种使用该功能添加人 物生气的方法,是创建关注点(Point of Insterest)。目前,弓箭手并不会注意到维京人,如果他能关注到任何附近角色就好了,我希望弓箭手的Aim Position,在两者之者的距离小于一定范围时,可以盯着维京人的头。

    我们可以为弓箭手添加简单的overlapsphere计算,将维京人的头作为关注点来实现,我在弓箭手上编写了一个称为Look At Nearby脚本。

    脚本会执行一个简单的OverlaspSphere计算,以人物头部为中心点向外辐射一定的半径,为人物添加一个球型的视区,来搜寻所有附近的碰撞体。

    脚本接着检查球型视区中是否有碰撞体,如果有则检查其是否带有Point of Interest组件。

    Point of Interest组件是一个最简单的组件,仅储存一个瞄准用的目标Transform。

    当Point of Insterest被指定到维京人上时,Look At Nearby脚本,会将Aim Target移向Point of Interest目标,当目标不再可见,Look At脚本会将目标位置重设为原点。

    在弓箭手上,我们指定头部Transform来配置好功能,确保型视区能从正确的高度投射出来。

    将Aim Target的Transform指定到弓箭手的骨架。

    暂时禁用Aim Idle脚本,防止与Look At Nearby脚本冲突。

    我在脚本中使用了OnDrawGizmo函数,来在场景中可视化球型视区。

    我们来将Vision Radius设为1.25。

    将Lerp Speed设为20。

    接着我们只需将维京人设为人物的关注点就行了。如果我们将维京人设为碰撞体,添加Point of Interest组件,就能把头部设定为视线的目标。播放场景,当维京人走过弓箭手时,弓箭手会盯着维京人,当两者距离够远,维京人走出视锥时,弓箭手头部会返回到起始位置。

    我们也能为附近的对象添加Point of Interest脚本,让人物能盯着它看。

    可以看到,动画绑定(Animation Rigging)可为游戏制作更多动态人物,人物间可以相互互动,让场景更具生气。

Unity学习笔记 Vol.70 使用动画绑定(Animation Rigging)制作程序化的角色动画的评论 (共 条)

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