【GAD翻译馆】VR100天教程:第十天创建一个敌人
译者:刘鸿(lewis2012,251423807) 审校:王玥亭(玥亭)
欢迎来到我的VR100天教程,今天是非常特别的日子。没错,第10天, 那就对了。我们终于来到两位数了!
目前为止,在Unity上编码是一个愉快的经历,特别是现在我更加了解了3D游戏。
我们还没有把它变成实际的虚拟现实游戏,但是我们能够为Unity获得一些基础技能,我相信这将有助于转化为创造一个真正的虚拟现实体验所需要的技能。
我们开始掌握可以在Unity中使用的游戏窍门。昨天,我们创造射击机制。
目前,只要我们击中了什么,我们就打印出我们击中的东西。今天我们要创建一个可以被射击的敌人并做一些修正。
更新枪击事件代码
我想要解决的第一件事是,当我们射击时,我们射击我们的cursor 指向的地方,这有点奇怪。
把cursor 移到中间
修改代码如下:
现在,当我们尝试玩游戏时,我们的光标将会消失。它将在屏幕的中间,我们看不到它。
添加十字准线(准心)
在这一点上,我们需要一些指示器来显示我们的“中心”在哪里。
要做到这一点,我们将创建一个UI十字准线,我们将放置在中间。
在hierarchy面板中,添加一个 我们称之为 十字准线(Crosshair)的 图像。通过这样做,Unity也将为我们创建一个 Canvas 。我们命名为HUD。
默认情况下,我们的十字准线已经设置在中间,但是它太大了。让我们让它更小 在 Rect Transform中,我将图像设置为 宽度 和 高度 10,10。
你现在应该有这样的东西:
在我们做任何事情之前,我们需要确保我们的鼠标碰撞器不会在我们的UI元素上发送raycast。
在 HUD中,附加一个 Canvas Group 组件,从那里取消选中的Interactable 和 Blocks Raycasts。你可能还记得, Canvas Group组件将允许我们将这2个设置应用到其子对象上,而无需自己手动执行。
去吧,体验下这个功能。如果我们观察我们的控制台,每当我们开火时,我们就会击中我们的小“十字准线”所在的位置。
创造我们的敌人
所以现在我们把光标固定在中间位置,接下来要做的就是创建一个敌人。
我们将改进这一点,但是现在,让我们创建我们的第一个敌人!一个立方体(cube)!
在你的hierarchy面板中加入一个立方体,把它命名为Enemy,然后把它拖到我们的玩家附近。
第一个敌人!
现在,当你射击它的时候,没有什么事情发生,所以让我们通过添加一个敌人的health脚本来修复它。我们把它叫做EnemyHealth
下面是EnemyHealth的代码:
这是相对简单的:
我们有我们的health值
我们有一个公有方法,我们称玩家攻击敌人,从而减少敌人的HP
当它达到0时,我们就会使敌人消失
在更新脚本之前,让我们对raycast进行一些优化。
进入我们的敌人游戏对象,然后将它的图层设置为Shootable,如果它不存在(它很可能不存在),创建一个新层,命名为Shootable,然后把它分配给敌人的布局。
现在让我们回到PlayerShootingController,我们获取刚刚创建的敌人的EnemyHealth脚本,从而让敌人受到伤害:
我们所做的改变与我们以前见过的Survival Shooter非常相似,但是我们补充说:
1)我们为我们的Shootable层创建了LayerMask,并将其传递到我们的Raycast函数中
注意,我首先使用int来表示我们的LayerMask,但是由于某些原因, Raycast忽略了int。经过网上搜索,我发现我们应该尝试实际的LayerMask对象,而不是使用int表示。当我尝试了一下,它居然正常工作了。
2)接下来,当我们击中一个对象,在这一点上,只能是Enemy,我们获得我们添加的敌人对象上的EnemyHealth 脚本,然后我们使敌人受到1点伤害。如果收到10次伤害,敌人会死。
现在用这个脚本附加到我们的敌人,射击我们的立方体10次(这应该发生真的很快),然后敌人死亡,移除敌人对象。
结论
这就是我第10天学到的!今天有点简短,因为我没有太多的时间去工作,但我认为我们取得了一些进步!
我们为敌人创造了基础,并添加了一个可以使用的十字准线(crosshair)UI。明天,我将开始研究如何从Unity Asset Store将敌人添加到游戏中。
在那之前,我会在第11天见到你!
访问 VR挑战100天的内容表
【版权声明】
已经询问原文作者,并获取原文作者翻译许可,译文获得授权。
联系原文作者JoshChang