其他
Unity官方教程|使用Raycast显示射击轨迹
本课程包括鼠标控制相机旋转、射击物体、显示射线轨迹及准星三个部分,最终实现效果如下:
在讲解实现步骤之前,先来了解Raycast的概念。Raycast可以简单理解为游戏场景中由某点发出的隐形射线,它能返回所有被射线射中的游戏对象的详细信息及RaycastHit结构体,RaycastHit结构体包括该游戏对象的Transform引用和射线与游戏对象交点的坐标等等。这里需要注意的是,只有带有碰撞体的游戏对象才能被射线检测到。
想了解更多关于Raycast及RaycastHit的信息,请点击[阅读原文]进入Unity官方中文社区。
另外要注意的是,在FPS游戏中,射击目标通常都是玩家眼睛朝向的位置,也就是相机正前方的中心点。所以这里瞄准物体并进行碰撞检测的射线并非我们需要绘制的射击轨迹。
找到Let’s Try Shooter > Scenes文件夹下的ShootingWithRaycasts场景并双击打开。其中已经设置好了本课程所需的游戏环境,FPSController来自Unity自带的Standard Assets资源包,下面新增了Gun游戏对象:
使用鼠标旋转场景中的相机,手臂会随着鼠标进行旋转。
注意,射线应该从玩家眼睛所处位置向眼镜前方射出,玩家眼睛即相机所在位置。
上述代码涉及到还未添加的脚本与游戏对象,下面的步骤将一一说明。
将创建好的GunEnd游戏对象拖拽至Gun对象的RaycastShoot脚本的GunEnd字段。
新建C#脚本重命名为RayViewer,将脚本拖拽至Gun游戏对象上,双击脚本进行编辑。RayViewer脚本代码如下:
到此射线的处理与绘制就差不多了,运行场景会看到场景视图出现了两条射线:
在上方的RaycastShoot脚本中已经添加了射击处理的逻辑,当射中立方体时,此时运行场景,已经可以进行射击了,但还是比较难进行瞄准。下面来添加准星。
设置好后再次点击运行,大功告成啦!再看看运行效果:
本次课程就分享到这里,如有任何疑问,请访问Unity官方中文社区。
更多Unity相关的技术教程,尽在Unity官方中文社区(forum.china.unity3d.com),请保持关注!