unity3d射线碰撞检测layermask的使用转_第1页
unity3d射线碰撞检测layermask的使用转_第2页
unity3d射线碰撞检测layermask的使用转_第3页
unity3d射线碰撞检测layermask的使用转_第4页
unity3d射线碰撞检测layermask的使用转_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Unity3D 射线碰撞检测 +LayerMask 的使用 转个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停 止发射 。用途:在 unity 中射线应用范围比较广, 多用于碰撞检测 (如: 子弹飞行是否击中目标) 、角色移动 等。相关 API :1、Ray Camera.main.ScreenPointToRay(Vector3 pos)返回一条射线 Ray 从摄像机到屏幕指定一个点2、Ray Camera.main.ViewportPointToRay(Vector3 pos)返回一条射线 Ray 从摄像机到视口 (视口之外无效) 指定 个点3、Ray 射线类4

2、、RaycastHit 光线投射碰撞信息5、bool Physics.Raycast(Vector3 origin, Vector3 direction,float distance, int layerMask)当光线投射与任何碰撞器交叉时为真,否则为假。bool Physics.Raycast(Ray ray, Vector3 direction,RaycastHit out hit, float distance, int layerMask)在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰 撞的细节信息 ()。bool Physics.Raycast(Ray ray, float d

3、istance, int layerMask)当光线投射与任何碰撞器交叉时为真,否则为假。bool Physics.Raycast(Vector3 origin, Vector3 direction,RaycastHit out hit,float distance, int layerMask)当光线投射与任何碰撞器交叉时为真,否则为假。注意:如果从一个球型体的内部到外部用光线投射,返回 为假。参数理解:origin : 在世界坐标中射线的起始点direction:射线的方向distance:射线的长度hit: 使用c #中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体

4、的transform,rigidbody,point 等信息。layerMask: 只选定 Layermask 层内的碰撞器,其它层内碰撞器忽略。 选择性的碰撞6、RaycastHit RaycastAll(Ray ray, float distance, int layerMask)投射一条光线并返回所有碰撞,也就是投射光线并返回个 RaycastHit 结构体。列子如下:using UnityEngine;using System.Collections;public classRayTest : MonoBehaviour / Use this for initializationvoi

5、d Start ()mainCrma = Camera.main;private Camera mainCrma;private RaycastHit objhit;private Ray _ray;void Update ()if(Input.GetMouseButtonDown(0)_ray=mainCrma.ScreenPointToRay(Input.mousePosition);/ 从摄像机发出一条射线 ,到点击的坐标显示Debug.DrawLine(_ray.origin,objhit.point,Color.red,2);/条射线,只有在 scene 视图中才能看到if(Phys

6、ics.Raycast (_ray, out objhit, 100)GameObject gameObj =objhit.collider.gameObject;Debug.Log(Hit objname:+gameO+Hit objlayer:+gameObj.layer);layerMask 参数:Raycast (ray :Ray, out hitInfo : RaycastHit, distance : float =Mathf.Infinity, layerMask : int = kDefaultRaycastLayers)其实很简单: 1 <<10 打

7、开第 10 的层。(1 << 10)打开除了第 10 之外的层。(1 << 0)打开所有的层。(1 << 10) | (1 << 8) 打开第 10 和第 8 的层。列子如下:/ Use this forusing UnityEngine;using System.Collections;public classLayerMaskTest : MonoBehaviour initializationvoid Start ()mainCrma =Camera.main;mask =1<<( LayerMask.NameToLayer(c

8、ube);/实例化 mask到 cube 这个自定义的层级之上。/privateLayerMask mask 1<<10;private LayerMask mask;private Camera mainCrma;private RaycastHit objhit;private Ray _ray;void Update ()if(10);(Input.GetMouseButtonDown(0)_ray=mainCrma.ScreenPointToRay(Input.mousePosition);/ 从摄像机发出一条射线 ,到点击的坐标划出Debug.DrawLine(_ray.origin,objhit.point,Color.red,2);/射线,只有在 scene 视图中才能看到if(Physics.Raycast (_ray,out objhit, 100, mas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论