方法一: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. xampp下bugfree部署

    以Bugfree3.0.4为例,讲解如何搭建LAMP架构的Web服务器. Bugfree是一个XAMPP架构的网站,XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的搭建XAMP ...

  2. HDU-2853 Assignment

    求二分最大匹配,但还要尽量接近原匹配... 解决方法:对于N个顶点的二分图,每条边同时乘上一个比N稍微大的数N',然后对于在原匹配的边就都+1. 经过这样处理,求得的答案Ans乘除N'即是原图的最大匹 ...

  3. [CODEVS1917] 深海机器人问题(最小费用最大流)

    传送门 [问题分析] 最大费用最大流问题. [建模方法] 把网格中每个位置抽象成网络中一个节点,建立附加源S汇T. 1.对于每个顶点i,j为i东边或南边相邻的一个节点,连接节点i与节点j一条容量为1, ...

  4. 刷题总结——影魔(HNOI2017 BZOJ4826 线段树+扫描线)

    题目: Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样 的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄 ...

  5. Eclipse + Apache Axis2 发布RESTful WebService(一)基础知识

    1.什么是WebService 学习 WebService 第一步:体系结构.三元素SOAP/WSDL/UDDI 2.什么是Axis2 Axis2是Apache一套崭新的WebService引擎(框架 ...

  6. Cannot open include file: 'initializer_list': No such file or directory

    Cannot open include file: 'initializer_list': No such file or directory今天使用VS2012编译一个项目的时候,遇到了这个问题,上 ...

  7. bzoj 4804 欧拉心算 欧拉函数,莫比乌斯

    欧拉心算 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 408  Solved: 244[Submit][Status][Discuss] Descr ...

  8. SharePoint 2013 Custom MasterPage

    <%@Master language="C#"%> <%@ Register Tagprefix="SharePoint" Namespace ...

  9. 把Execl表格中的数据获取出来保存到数据库中

    比如我们遇到一些需要把execl表格中的数据保存到数据库中,一条一条保存效率底下而且容易出错,数据量少还好,一旦遇到数据量大的时候就会累死个人啊,下面我们就来把execl表格中数据保存到对应的数据库中 ...

  10. Java 8 Streams的简单使用方法

    Java 8 Streams的简单使用方法 package JDK8Test; import java.util.ArrayList; public class Main { public stati ...