射线碰撞-Unity3D总结

方法一:Physics.Raycast 光线投射

1.static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

一个静态的发射射线的方法,在场景中投下可与所有碰撞器碰撞的一条光线。

参数解释:

origin:射线起始点

direction:射线方向

distance:射线长度

layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略。

返回布尔类型,当光线投射与任何碰撞器交叉时为真,否则为假。

(注意:如果从一个球型体的内部到外部用光线投射,返回为假。 )这一点测试不成功!

2.static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息。

Parameters参数

origin

The starting point of the ray in world coordinates.

在世界坐标,射线的起始点。

direction

The direction of the ray.

射线的方向。

distance

The length of the ray

射线的长度。

hitInfo

If true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).

如果返回true,hitInfo将包含碰到器碰撞的更多信息。

layerMask

A Layer mask that is used to selectively ignore colliders when casting a ray.

只选定Layermask层内的碰撞器,其它层内碰撞器忽略。

Returns

当光线投射与任何碰撞器交叉时为真,否则为假。

使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。

射线碰撞-unity3d学习总结

详细解释一下: LayerMask 层蒙版

如图所示,每一个物体都有一个Tag和Layer标签,tag就是一个简单的标签,可以用来区分不同的物体,LayerMask的作用是可以选择性地过滤物体,例如当投射射线时,比如camera.cullingmask和光线投射时候。

如图,可以在TagManager中编辑tag和Layer

然后设置物体的Layer层级,在摄像机中设置camera.cullingmask,可以控制摄像机的渲染层级,用在射线上,可以控制射线碰撞什么,不碰撞什么。

//Raycast hit

RaycastHit hit;

LayerMask mask = 1 << 8;

void testRay(){

if(Physics.Raycast(transform.position,Vector3.right,out

hit,100, mask.value)){

Debug.DrawLine(transform.position,hit.point,Color.red,1);

}

}

上面的例子是从当前脚本所绑定的物体做标点向右发射长度100的射线,射线碰撞层级为8,其他层级忽略。

为了测试,我们在碰撞到物体后画一条红色线条,表示射线,停留一秒钟。

上面这些是射线的一些基本操作。

方法二:Physics.RaycastAll 光线投射

static function RaycastAll (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : RaycastHit[]

static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]

投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值