方法一:Physics.Raycast 光线投射

1.static function Raycast (origin : Vector3direction : Vector3distance :
float = Mathf.InfinitylayerMask :
int = kDefaultRaycastLayers) : bool
一个静态的发射射线的方法,在场景中投下可与全部碰撞器碰撞的一条光线。
參数解释:
origin:射线起始点
direction:射线方向
   distance:射线长度
   layerMask:仅仅选定Layermask层内的碰撞器,其他层内碰撞器忽略。
返回布尔类型,当光线投射与不论什么碰撞器交叉时为真。否则为假。
(注意:假设从一个球型体的内部到外部用光线投射,返回为假。

)这一点測试不成功!

2.static function Raycast (origin : Vector3direction : Vector3out
hitInfo
 : RaycastHitdistance : float = Mathf.InfinitylayerMask :
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#中outkeyword传入一个空的碰撞信息类,然后碰撞后赋值。能够得到碰撞物体的transform,rigidbody,point等信息。



详解一下:

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 : Raydistance :
float = Mathf.Infinity,
layerMask : int = kDefaultRaycastLayers) : RaycastHit[]

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

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



Unity3D总结:关于射线碰撞的更多相关文章

  1. 【Unity3d】Ray射线初探-射线的原理及用法

    http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...

  2. 【Unity3D】刚体与碰撞体以及is Trigger属性的意义

    [Unity3D]刚体与碰撞体以及is Trigger属性的意义 刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件. 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力). 刚 ...

  3. Unity3D笔记 英保通十 射线碰撞器检测

    射线碰撞检测可以用来检测方向和距离: 通过Physics.RayCast光线投射来实现:常用于射击利用发射的射线来判断.还有对战中刀剑交战中.. 一.要涉及到RayCast和RayCastHit 1. ...

  4. unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)

      刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...

  5. Unity屏幕射线碰撞

    Layers层: 从Layers设置看来,最多支持32层.  图层的值开始依次 0^2,1^2, 2^2, 3^3 依次增加. 当摄像机Culling Mask属性 Nothing= –1 Eveni ...

  6. Unity3D入门(二):碰撞检測

    碰撞器由来 1.系统默认会给每一个对象(GameObject)加入一个碰撞组件(ColliderComponent),一些背景对象则能够取消该组件. 2.在unity3d中,能检測碰撞发生的方式有两种 ...

  7. Unity3D之物理射线

    射线:从一个点往一个方向,发射一根无限长的射线,这根射线会与场景中带有 Collider 组件的物体发生碰撞. 射线的使用: public class Test { private void Star ...

  8. Unity3D中的射线与碰撞检测代码

    两种不同写法的射线检测 1.获取鼠标点击的物体 if (Input.GetMouseButtonDown(0)) { Ray ray = MainCamera.ScreenPointToRay(Inp ...

  9. Unity3D 之防止刚体碰撞导致旋转

    有时候两个刚体发生碰撞的时候,其中一个质量小的会有发生旋转的情况 如果遇到这样的情况,只需要给刚体添加一个约束就行了. 添加这个就行了.

随机推荐

  1. iOS----闪退,无报错原因,经典解决方案

    在iOS开发时,有时候遇到libc++abi.dylib handler threw exception这样的异常,  虽然在断点出加上了All Exceptions,也断到相应的代码了,但是没打印对 ...

  2. select * from 为什么效率低?

    sql优化有很重要的一项叫做列裁剪(column pruning).如果不考虑索引,sql的执行算法大概分为sort-base和hash-base,不论是哪种,多出来的列都会带来很多无用的计算. “* ...

  3. vue 配合 element-ui使用搭建环境时候遇到的坑

    在需要使用element-ui的时候,直接引入文件,发现会报错,解析不了css文件和字体,需要在webpack里面配置上css-loader和style-loader,最好的做法是把element-u ...

  4. OpenStack 通用设计思路

    API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例,nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...

  5. 【BZOJ4945&&UOJ317】游戏(2-sat,拓扑序)

    题意: 思路: 输出方案时有一个优秀的性质可以利用: tarjan缩点之后点所属的分量编号是原图的反的拓扑序 所以只需要在两种方案内找到所属分量编号较小的那个就行了,用来满足(i,i')那个限制 #i ...

  6. net1:DateTime,Application与Session,

    原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  7. HDU 6218 (线段树+set)

    HDU 6218 Bridge Problem : 给一个2×n的矩阵,一开始矩阵所有相邻点之间有一条边.有其.个询问,每次给出两个相邻的点的坐标,将其中的边删除或者添加,问如此操作之后整张图的割边数 ...

  8. ThinkPHP 的 Vender的简单实用

    ThinkPHP 的 Vender的简单实用 框架版本:3.2 示例一.调用二维码类: Vendor('phpqrcode.phpqrcode'); $QRcode = new \QRcode (); ...

  9. checkbox 复选框只能选中一次,之后不能用

    <td> <input type="checkbox" name="is_check" id="is_check" val ...

  10. HDU 1394:Minimum Inversion Number(树状数组,线段树)[水]

    题意:有0~n-1这n个数,以一定的排列.这个排列可以循环,就是可以把第一个拿到最后,然后形成新的排列.问这些排列中的逆序对最小值. 思路: 最后的循环,拿走一个之后,新的逆序对数 newsum = ...