Unity3D总结:关于射线碰撞

原创 2012年11月27日 10:32:18

方法一: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#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的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[]结构体。



有一部分人说没效果,我想可能是layer值没有设置正确,layer的值应该是等于2的n次方,这个n是layer面板上的值,只要设置正确,应该是没有问题的

unity之Ray、RaycastHit 、Raycast

Ray(Vector3 origin, Vector3 direction) Ray:在程序中可以理解为射线,就是以某个位置(origin)朝某个方向(direction)的一条射线; 所以在应用R...
  • Rose_Girls
  • Rose_Girls
  • 2015年10月07日 18:29
  • 8020

【Unity3D】Raycast使用

1.鼠标点击控制移动 1)获得点击坐标, 2)根据坐标设置朝向 3)沿着朝向向前移动 4)当坐标与点击坐标距离小于规定值时停止移动    void Update () {         ...
  • u013785119
  • u013785119
  • 2014年10月11日 22:47
  • 1538

Unity--光线投射碰撞Physics.Raycast和Physics.RaycastAll

Physics.Raycast 光线投射 static function Raycast (origin : Vector3, direction : Vector3, distance...
  • hany3000
  • hany3000
  • 2015年03月29日 00:08
  • 3773

Unity Physics.Raycast 深入理解

Physics.Raycast 理解 方法原型与参数说明   其实这个函数有个很藏的很深的地方就是这个layermask, 一般情况我们获取layer的值都会是layermask.nametolay...
  • pdw_jsp
  • pdw_jsp
  • 2016年08月11日 14:55
  • 4221

Unity3D Ray射线

  • 2013年08月24日 22:00
  • 66KB
  • 下载

Unity Ray 射线检测

首先在PC端实现鼠标点击某个物体执行某个操作时我们用Input.GetMouseButtonDown(0),获取鼠标点击事件。 再通过Ray ray=Camera.main.ScreenPointT...
  • naoomi
  • naoomi
  • 2015年06月26日 16:29
  • 3795

unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子

unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西,总结了些东西放上来,一来做个笔记,二来和大家分享分享!嘿嘿...
  • Highning0007
  • Highning0007
  • 2014年07月20日 13:47
  • 23514

[UnityUI]UGUI射线检测

1.Graphic Raycaster:主要用于UI上的射线检测 a.挂有这个组件的物体,必须也要挂上Canvas这个组件,因为Graphic Raycaster依赖于Canvas b.挂有这个组件的...
  • lyh916
  • lyh916
  • 2016年03月21日 21:45
  • 11944

Unity射线检测使用

方法一:Physics.Raycast 光线投射 1.staticfunction Raycast (origin : Vector3, direction : Vector3, distance ...
  • Ymiku
  • Ymiku
  • 2015年05月24日 22:35
  • 1749

Unity 射线检测碰撞

这次用案例讲解射线碰撞。我们要模仿,一个小物体快速碰撞一个大物体时的碰撞效果。新建一个3D工程,场景中新建一个cube位置是(0,0,500),给cube添加tag为cube。再新建一个Sphere,...
  • u014230923
  • u014230923
  • 2016年05月12日 11:57
  • 2039
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D总结:关于射线碰撞
举报原因:
原因补充:

(最多只允许输入30个字)