首页 理论教育 Unity3D游戏开发项目教程:射线的碰撞和销毁物体

Unity3D游戏开发项目教程:射线的碰撞和销毁物体

时间:2023-11-16 理论教育 版权反馈
【摘要】:在射线的轨迹上,一旦与添加了碰撞器的模型发生碰撞,将停止发射。RaycastHit:用于存储发射射线后产生的碰撞信息。point——射线与碰撞器交点的坐标。图6-15搭建场景图6-16添加新层图6-17添加Coin 层图6-18设置Coin 层创建一个脚本RayObject,挂载给Main Camera,实现当鼠标点击Cube时,Cube红黄蓝三种颜色交替换装;实现只有射线碰撞到的物体是“Coin”层并且按下鼠标左键的时候才能销毁物体,也就是当射线碰撞到其他层的物体即使鼠标点击左键也不会销毁。

Unity3D游戏开发项目教程:射线的碰撞和销毁物体

在游戏开发过程中,有一个很重要的工作就是进行碰撞检测。例如在射击游戏中检测子弹是否击中敌人,在RPG 游戏中检测是否捡到装备等。在进行碰撞检测时,最常用的工具就是射线,Unity 3D的物理引擎也为用户提供了射线类以及相关的函数接口

射线是在三维世界中从一个点沿一个方向发射的一条无限长的线。在射线的轨迹上,一旦与添加了碰撞器的模型发生碰撞,将停止发射。用户可以利用射线实现子弹击中目标的检测,鼠标点击拾取物体等功能。

创建一条射线Ray,需要指明射线的起点(origin)和射线的方向(direction),这两个参数也是Ray的成员变量

定义射线函数:

public Ray(Vector3 origin,Vector3 direction);

射线检测函数:

public static bool Raycast(Ray ray,out RaycastHit hitInfo,float maxDistance,int layerMask);

ray:射线。

RaycastHit:用于存储发射射线后产生的碰撞信息。常用的成员变量有:

collider— —与射线发生碰撞的碰撞器。

distance— —从射线起点到射线与碰撞器的交点的距离。

point——射线与碰撞器交点的坐标(Vector3对象)。

maxDistance:射线的距离(默认无限长)。

layerMask:遮罩(过滤射线,默认所有层都接受射线检测,变量类型为LayerMask)。

接下来举例讲解射线的使用:

(1)新建一个工程RayDemo,保存场景“RayTest”。在场景中创建一个Cube,一个空物体Coin,在Coin容器下创建三个Sphere,并给三个Sphere赋予材质,如图6-15所示。(www.xing528.com)

(2)给三个Sphere添加标签“Coin”,具体方法在5.3.3小节GameObject类中已经讲述过,这里就不再赘述。

(3)给三个Sphere添加新的层Coin。在场景中选中Sphere,点击Inspector视图中Layer旁的“Default”按钮,在下拉菜单中点击“Add Layer...”,如图6-16所示。在弹出的Tags&Layers面板中User Layer8处输入“Coin”,如图6-17所示。这时在Layer的下拉层中就多了Coin层,选中场景中的所有Sphere,点击Layer旁的“Default”→“Coin”,即将场景中的所有球设置为Coin 层,如图6-18 所示。

图6-15 搭建场景

图6-16 添加新层

图6-17 添加Coin 层

图6-18 设置Coin 层

(4)创建一个脚本RayObject,挂载给Main Camera,实现当鼠标点击Cube时,Cube红黄蓝三种颜色交替换装;实现只有射线碰撞到的物体是“Coin”层并且按下鼠标左键的时候才能销毁物体,也就是当射线碰撞到其他层的物体即使鼠标点击左键也不会销毁。即当鼠标点击球的时候,球会销毁,如图6-15 所示,具体代码如下:

(5)按下[Ctrl+S],保存场景并运行程序,在Scene窗口可以看到Main Camera发出的红色射线。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈