下面是演示环节 本节我们在《慕课英雄
2》的游戏场景中 为玩家对象添加角色模型,并设置动画
IK 使玩家角色模型能够持枪站立 这里我们已经在
Unity 编辑器中打开了《慕课英雄 2》的
GamePlay场景 为了方便测试,我们暂时禁用场景中所有的僵尸
[空白_录音] 接下来我们删除场景中的
FPSPlayer 对象 在
Project 项目视图中,依次打开 Prefabs Unit1
把 RobotPlayer 对象拖入场景中
RobotPlayer 相比于 FPSPlayer 多了一个机器人模型
可以看到刚添加的机器人模型并不会双手持枪 选中
RobotPlayer 双击打开它的动画控制器
我们可以看到 RobotPlayer 的
动画控制器包含了奔跑、 跳跃等动画状态 接着在动画控制器
Layers 列表中单击第一个动画层,右上角的小齿轮
在弹出的窗口中勾选 IK Pass 开启
IK 控制功能,下面 我们为
RobotPlayer 玩家对象添加四个球体子对象 首先展开
RobotPlayer 对象
给它添加一个球体子对象 重命名为
BodyObject [空白_录音]
调整大小和位置 将它放置在玩家躯干内
[空白_录音] 接着在
Gun 对象下 添加一个球体子对象,重命名为
LeftHandObject 调整它的大小和位置
将它放置在枪的前掌托位置
[空白_录音]
[空白_录音] 然后在 Gun 对象下
添加一个球体子对象,重命名为 RightHandObject
调整它的大小 [空白_录音]
将它放置在枪柄的位置
[空白_录音]
[空白_录音] 最后,在
Gun 对象下添加一个球体子对象 重命名为
GunBarrelEnd 调整它的大小
[空白_录音] 将它放置在抢口的位置
[空白_录音]
[空白_录音]
[空白_录音]
[空白_录音]
[空白_录音] 接着我们为玩家对象添加
IK Controller 控制脚本 [空白_录音]
添加后我们把 IK Controller
脚本的 Look Object 属性设置为 GunBarrelEnd
将 LeftHandObject 的
属性设置为刚才创建的 LeftHandObject 球体子对象。
RightHandObject 设置为 RightHandObject 球体。
最后把 BodyObject 设置为 BodyObject
球体子对象 下面我们禁用这四个
IK 标记物球体对象的 Mesh Renderer
的组件 隐藏这些小球的显示
同时移出它们的碰撞体组件 [空白_录音]
下面我们进行游戏预览 可以看到玩家的左手
和右手分别位于枪的前掌托和枪柄位置 当玩家向天空或者地面瞄准时
玩家角色模型也会同步的抬头或者低头 放大观察玩家的左手
[空白_录音] 我们可以看到玩家左手的方向和位置
均不准确 我们调整玩家左手
IK 标记物 LeftHandObject 使玩家左手具有正确的位置和朝向
[空白_录音]
[空白_录音]
[空白_录音] [空白_录音]
调整完毕后,我们在左手 IK 标记物的 Transform
属性上 点击鼠标右键,选择 Copy Component
进行复制 下面我们结束游戏的预览
此时玩家左手 IK 标记物 LeftHandObject
还原为预览前的状态 我们再次选择玩家左手 IK 标记物
LeftHandObject 右键点击 Transform
组件,选择 Paste Component Values
这样我们就完成玩家左手的调整 接下来我们用类似的方法调整玩家的右手和躯干
[空白_录音] 现在我们已经完成所有
IK 标记物的调整 点击预览游戏按钮,我们可以查看玩家的持枪效果
下面我们停止游戏的预览 我们讲解
IK Controller 脚本中的代码 双击打开
IK Controller 脚本 [空白_录音]
首先是 Start 函数 我们在
Start 函数中获取游戏对象的 animator 组件
接着是 OnAnimatorIK
函数 它包含了所有和 IK 设置相关的代码 我们在
OnAnimatorIK 函数中 使用 Animator 组件的
SetLookAtWeight 函数,和 SetLookAtPosition
函数 把玩家的视线方向设置为 lookobject 对象所在的方向 我们使用
bodyObject 对象的 rotation
属性 设置玩家躯干的旋转角度
通过 Animator 组件的 SetIKPosition 和 SetIKRotation
函数 我们设置玩家左右手的位置和朝向 我们分别设置
LeftHandObject 对象和 RightHandObject 对象的 position
和 rotation 属性 设置玩家的左手和右手的
IK [空白_录音]
这样我们就完成了玩家角色模型的 IK 设置
接下来我们回到 Unity 编辑器
我们给 GunBarrelEnd
对象 添加 Player Attack 脚本
设置脚本的攻击属性 其中
Shooting Damage 设置为 3 Shooting Range
设置为 50 Shooting Interval 设置为
0.5 Shooting Audio 表示射击音效,设置为
m4 sheet 攻击时枪口特效
Gun Shooting Effect 设置为
Fireball1 子弹爆炸特效设置为
Sparks
将 Shooting Effect Transform 属性设置为
GunBarrelEnd 设置完成后,我们保存游戏场景
以上
就是本节演示的全部内容