方法一: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. 简单使用jstl实现敏感字替换

    package com.ceshi; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; ...

  2. [UOJ#276]【清华集训2016】汽水

    [UOJ#276][清华集训2016]汽水 试题描述 牛牛来到了一个盛产汽水的国度旅行. 这个国度的地图上有 \(n\) 个城市,这些城市之间用 \(n−1\) 条道路连接,任意两个城市之间,都存在一 ...

  3. (C++一本通)最少转弯问题 (经典搜索)

    题目描述 给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山.平地可以通过,高山则不能.现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能 ...

  4. js方法encodeURI后,关于get请求url长度的限制测试与总结

    (本文仅作个人记录只用比较啰嗦,重点只看红字部分即可) Test.jsp 请求test1.jsp IE11环境下,get请求url最多4096个字节: 请求的是http://localhost:908 ...

  5. Python基础教程总结(一)

    引言: 一直都听说Python很强大,以前只是浏览了一些博客,发现有点像数学建模时使用的Matlab,就没有深入去了解了.如今Python使用的地方越来越多,最近又在学习机器学习方面的知识,因此想系统 ...

  6. 写论文,关于word的技巧

    当段落的行间距为固定值的时候,图片会出现显示不全的情况,将行间距先改了再插入图片就没问题了. 从引用那边自动添加目录. ctrl+H打开可以使用通配符,改变字母或者数字的样式等

  7. Milk Patterns(poj 3261)

    题意:找出出现k次的可重叠的最长子串的长度. /* 求出height数组,二分答案,将height分组,看有没有一组个数大于K. WA了很多遍,最后看别人的题解,发现往字符串后面填了一个0,就可以AC ...

  8. 洛谷 P 1133 教主的花园

    题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树 ...

  9. 防止点击asp.net的button按钮刷新页面(保留button的外观)

    原文发布时间为:2008-08-06 -- 来源于本人的百度文章 [由搬家工具导入] Button btn=new Button(); 1、如果用 btn.Enabled=false;是可以防止刷新的 ...

  10. 开始学习es6(二) let 与 const 及 块级作用域

    1.var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) cons ...