在开始探索如何使用VR并将其应用回游戏中之前,还有一些事情要做。目标是创建一个新的敌人。具体来说,为了练习,想创建: 一个生命值较低但速度较快的单位; 一个生命值较高但速度较慢的单位。 有了这些新敌人,游戏将拥有更多样化和有趣的体验! 今天,将专注于创建快速的单位。
步骤1:获取新资源 需要做的第一件事是去最喜欢的世界角落!Unity Asset Store! 将寻找一个可以作为敌人的资源。在寻找新资源时,对来说最重要的是找到一些 mecanim 准备好的资源。 如果不了解 mecanim 系统的辉煌,可以访问 第11天 ,第一次使用它。 基本的总结是,所有的Unity模型都可以有绑定的身体结构,可以共享来自 其他 模型的动画,而不需要做任何额外的工作。
步骤1.1:获取强盗资源 在资源商店浏览敌人时,发现了一个不错的强盗,可以用作快速敌人! 它叫做 Basic Bandit : 下载并将强盗导入游戏。它将在 Assets > BasicBandit 中。
步骤2:设置BasicBandit 现在有了资源,接下来需要做的是设置 BasicBandit 资产,以使用现有的动画和脚本! 这项工作将与对骑士模型所做的工作相同,只是这次不需要编码!
步骤2.0:设置Wave 1 SpawnManager以生成-1个敌人 这不是必要的,但为了方便测试新敌人。如果将 Wave 1 的 SpawnManager, 设置为生成 -1 个敌人,就不会创建任何新敌人,波次也不会进展,这让可以在敌人身上进行实验。 另一个选择是在 SpawnManager 代码中注释掉实例化代码,以不创建任何新敌人。
步骤2.1:附加骑士动画控制器 Unity的mecanim系统的好处是,可以为具有相同动画的模型重用现有的动画控制器。 在这种情况下,因为骑士和强盗都是类人生物,可以与强盗共享 Knight Animator Controller 。 现在让来做这件事! 在 Assets > BasicBandit 中,将 Basic_BanditPrefab 拖放到游戏中。 在层级结构中选择强盗,在 Animator 组件下,选择 Knight Animator Controller 来填充插槽。 现在将拥有类似的东西:
步骤2.2:添加Nav Mesh Agent和3个脚本:EnemyHealth、EnemyAttack和EnemyMovement 此时,希望重建附加在骑士上的所有东西,将其移动到强盗上。 希望通过点击检查器中的 Add Component 向 BasicBandit 添加以下内容: Nav Mesh Agent 组件,作为导航AI,使强盗追逐玩家 EnemyHealth: 当玩家射击敌人时接收伤害 EnemyAttack: 检测敌人何时伤害玩家 EnemyMovement: 控制敌人的移动逻辑
步骤2.3:设置脚本和Nav Mesh Agent 现在已经附加了脚本,需要设置它们。 Nav Mesh Agent 对于 Nav Mesh Agent 组件,希望调整它的移动速度。 让将 Speed 设置为3.25。 Knight's speed 是 3 。
EnemyHealth 对于Enemy Health,希望设置: Health: 5 Hit Sfx Clips > Size: 4 将4个新的 Audio Clips 设置为 Male_Hurt_01 – Male_Hurt_04 Hit Sound Delta: 5
EnemyMovement 对于 EnemyMovement 脚本,希望设置: Walking Clips > Size: 4 将4个新的 Audio Clips 设置为 Footstep01 – Footstep04 Walking Delay:3
EnemyAttack 还没有为 EnemyAttack 脚本设置一切,但让先设置能设置的。 Attack Sfx Clips > Size: 3 将3个新的 Audio Clips 设置为 Punch_01 – Punch_03 暂时不要管拳头碰撞体
现在如果玩游戏, Basic_Bandit 将开始追逐,但他还没有攻击,还没有设置触发器和碰撞体!
步骤2.4:添加3个碰撞体:触发碰撞体、网格碰撞体和拳头碰撞体 最后,需要为强盗添加碰撞体,这将帮助检测玩家何时靠近,敌人何时伤害玩家,以及他们何时被击中。 为了回顾需要做什么,需要: 一个 Capsule Collider 用作触发器,告诉强盗如果他靠近玩家就进入攻击模式。 2个Box Collider 将附加在强盗的手上,告诉何时伤害玩家。 一个 Mesh Collider 用于检测玩家射击强盗时。 让添加它们。
添加Capsule Collider 在层级结构中选择 Basic_Bandit ,然后添加 Capsule Collider 组件。 将使其成为 触发器, 将 Y 设置为 1 ,然后扩展 Radius 为 1.5 。 完成后,应该有类似的东西: 注意 :半径是看到的外球体。
为了回顾,每当玩家进入圆圈时,在 EnemyAttack 脚本中,将击中 OnTriggerEnter() ,这用于告诉强盗它可以击中玩家的范围。
添加2个Box Collider 接下来,需要为 Bandit 的 fists 添加2个Box Collider。 选择 Basic_Bandit > Armature > Hips > Spine > Chest > Shoulder.L > UpperArm > LowerArm > Hand.L 希望在 Hand.L 上添加一个 Box Collider 。 在 Transform 中,将保持位置不变,但是,让改变 Box Collider 的 Size : Size (X, Y, Z): 0.1, 0.3, 0.1 最后,只需将 Fist Collider Script 附加到 Hand.L 。 完成后,将有类似的东西: 现在对 Hand.R 中的另一只手做完全相同的事情。
添加Mesh Collider 接下来是 Mesh Collider 组件。 正如在 第20天 中学到的,将碰撞体添加到父对象中不会起作用,应该将碰撞体放在网格本身的位置。 这将为服务2个目的: 可以射击敌人 敌人可以推动 在强盗的情况下,有2个部分:身体和衣服。 上面看到的是强盗网格的每个部分的Mesh Collider。 让开始吧! 在 BasicBandit_Body 中,添加一个 Mesh Collider 组件,在 Mesh 下添加网格 BasicBandit_Clothes 。有了这个,将有上面的第1张图片。
接下来: 在 BasicBandit_Clothes 中,添加一个 Mesh Collider 组件,在 Mesh 下添加网格 BasicBandit_Clothes 。有了这个,将有上面的第2张图片。 现在几乎完成了。 有碰撞体来检测强盗何时被击中,然而,如果尝试射击敌人,还没有“击中”他。
步骤2.5:将强盗的层设置为可射击 可能还记得,当在 PlayerShootingController 中使用射线投射射击敌人时,进行了优化,只击中设置了 Shootable 层掩码的对象。 在层级结构中选择强盗,并将 Layer 设置为 Shootable 。 现在有了这些碰撞体设置,可以射击强盗,他们会受到伤害并被击退。
步骤2.6:将拳头碰撞体附加到EnemyAttack 之前,将 First Collider script 附加到强盗的手上。是时候将两只手附加到 EnemyAttack Script ,以便可以检测强盗的拳头是否与玩家接触 Attack() 。 在 EnemyAttack 中设置: Left Fist: L Right Fist: R