Unity 3D

来源:互联网 发布:pdf文档编辑软件 编辑:程序博客网 时间:2024/06/10 19:22

Unity 3D - Ray ( 射线 ) :

从某个点向一个方向发射的一条无终点的钱 , 一旦与其它对象碰撞 , 将停止并返回碰撞体信息 .

C# 代码 :

RaycastHit hit;LayerMask mask = 1 << (LayerMask.NameToLayer ("Floor"));Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);if (Physics.Raycast (ray , out hit, Mathf.Infinity, mask)) {    print(hit.transform.name);}

返回一条从摄像机到屏幕指定一个点的射线Ray :

Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);  

判断射线是否射击( 触碰 )到指定层级的碰撞器 :

重载四种形式 :

Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)Physics.Raycast(Ray ray, float distance, int layerMask)Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)
  • 参数说明 :
名称 说明 origin 在世界坐标中射线的起始点 direction 射线的方向 distance 射线的长度 hit out关键字传入一个空的碰撞信息类,然后碰撞后赋值 , 可以得到碰撞物体的transform,rigidbody,point等信息 layerMask 只选定Layermask层内的碰撞器,其它层内碰撞器忽略 . 选择性的碰撞

layerMask参数:

层级设置如图 :

这里写图片描述

取得地面层 :

LayerMask mask = 1 << (LayerMask.NameToLayer ("Floor"));

1 << 10 打开第10的层。

~(1 << 10) 打开除了第10之外的层。

~(1 << 0) 打开所有的层。

(1 << 10) | (1 << 8) 打开第10和第8的层 :

其他 :

创建一个射线 :

Ray ray = new Ray(Vector3.zero, transform.position);
1 0
原创粉丝点击