Unity 3D - Ray ( 射线 )

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射线的长度
hitout关键字传入一个空的碰撞信息类,然后碰撞后赋值 , 可以得到碰撞物体的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);
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值