RaycastHit 光线投射碰撞

Struct

Structure used to get information back from a raycast.

用来获取从raycast函数中得到的信息反馈的结构。

参见:Physics.RaycastPhysics.LinecastPhysics.RaycastAll.

Variables变量

  • The impact point in world space where the ray hit the collider.
    在世界空间中,射线碰到碰撞器的碰撞点。 
  • The normal of the surface the ray hit.
    射线所碰到的表面的法线。 
  • The barycentric coordinate of the triangle we hit.
    所碰到的三角形的重心坐标。 
  • The distance from the ray's origin to the impact point.
    从光线的原点到碰撞点的距离。 
  • The index of the triangle that was hit.
    碰到的三角形的索引。 
  • The uv texture coordinate at the impact point.
    在碰撞点的UV纹理坐标。 
  • The secondary uv texture coordinate at the impact point.
    碰撞点的第二个UV纹理坐标。 
  • The uv lightmap coordinate at the impact point.
    所在碰撞点的光照图UV坐标。 
  • The Collider that was hit.
    碰到的碰撞器。 
  • The Rigidbody of the collider that was hit. If the collider is not attached to a rigidbody then it is null.
    碰到的碰撞器的Rigidbody。如果该碰撞器没有附加刚体那么它为null。 
  • The Transform of the rigidbody or collider that was hit.
    碰到的刚体或碰撞器的变换。 
     

Physics.Raycast 光线投射

static function Raycast (origin : Vector3, direction : Vector3, 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
    射线的长度。
  • layerMask
    A Layer mask that is used to selectively ignore colliders when casting a ray. 
    只选定Layermask层内的碰撞器,其它层内碰撞器忽略。

Returns

bool - True when the ray intersects any collider, otherwise false.

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

Description描述

Casts a ray against all colliders in the scene.

在场景中投下可与所有碰撞器碰撞的一条光线。

  1.  
    using UnityEngine;
  2.  
    using System.Collections;
  3.  
     
  4.  
    public class Example : MonoBehaviour {
  5.  
    void Update() {
  6.  
    Vector3 fwd = transform.TransformDirection(Vector3.forward);
  7.  
    if (Physics.Raycast(transform.position, fwd, 10))
  8.  
    print("There is something in front of the object!");
  9.  
     
  10.  
    }
  11.  
    }

Note: This function will return false if you cast a ray from inside a sphere to the outside; this in an intended behaviour.

注意:如果从一个球型体的内部到外部用光线投射,返回为假。

• 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

bool - True when the ray intersects any collider, otherwise false.

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

Description描述

Casts a ray against all colliders in the scene and returns detailed information on what was hit.

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

  1.  
    using UnityEngine;
  2.  
    using System.Collections;
  3.  
     
  4.  
    public class Example : MonoBehaviour {
  5.  
    void Update() {
  6.  
    RaycastHit hit;
  7.  
    if (Physics.Raycast(transform.position, -Vector3.up, out hit))
  8.  
    float distanceToGround = hit.distance;
  9.  
     
  10.  
    }
  11.  
    }

又一个例子:

  1.  
    using UnityEngine;
  2.  
    using System.Collections;
  3.  
     
  4.  
    public class Example : MonoBehaviour {
  5.  
    void Update() {
  6.  
    RaycastHit hit;
  7.  
    if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0F))
  8.  
    float distanceToGround = hit.distance;
  9.  
     
  10.  
    }
  11.  
    }

• static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

Parameters参数

  • ray
    The starting point and direction of the ray.
    射线的起点和方向
  • distance
    The length of the ray
    射线的长度。
  • layerMask
    A Layer mask that is used to selectively ignore colliders when casting a ray. 
    只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 

Returns

bool - True when the ray intersects any collider, otherwise false.

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

Description描述

Same as above using ray.origin and ray.direction instead of origin and direction.

使用ray.origin和ray.direction同上,替代origin和direction。

  1.  
    using UnityEngine;
  2.  
    using System.Collections;
  3.  
     
  4.  
    public class Example : MonoBehaviour {
  5.  
    void Update() {
  6.  
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  7.  
    if (Physics.Raycast(ray, 100))
  8.  
    print("Hit something");
  9.  
     
  10.  
    }
  11.  
    }

• static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

Parameters参数

  • ray
    The starting point and 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

bool - True when the ray intersects any collider, otherwise false.

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

Description描述

Same as above using ray.origin and ray.direction instead of origin and direction.

使用ray.origin和ray.direction同上,替代origin和direction。

  1.  
    using UnityEngine;
  2.  
    using System.Collections;
  3.  
     
  4.  
    public class Example : MonoBehaviour {
  5.  
    void Update() {
  6.  
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  7.  
    RaycastHit hit;
  8.  
    if (Physics.Raycast(ray, out hit, 100))
  9.  
    Debug.DrawLine(ray.origin, hit.point);
  10.  
     
  11.  
    }
  12.  
    }
 

Mathf.Infinity 正无穷

static var Infinity : float

Description描述

A representation of negative infinity (Read Only).

表示正无穷,也就是无穷大,∞ (只读)[in'finiti]

  1.  
    // Casts a ray from (0,0,0) towards (0,0,1) to the infinity and prints a message
  2.  
    //画一条射线从(0,0,0) 向 (0,0,1)到无穷远,并打印一个消息
  3.  
    // if any object has touched the ray.
  4.  
    //如果任意物体碰到这个射线
  5.  
    // To test it, just place any object and intersect it with the white drawn line
  6.  
    //为便于测试,只需放置任意物体相交于白色的绘制线
  7.  
     
  8.  
    function Update () {
  9.  
    // shows the line that follows the ray.
  10.  
    //显示这条射线
  11.  
  12.  
    if (Physics.Raycast (Vector3.zero, Vector3.forward, Mathf.Infinity)) {
  13.  
    print ("There is something in front of the object!");
  14.  
    }
  15.  
    }

Ray 射线

Struct

Representation of rays.

表示射线。

A ray is an infinite line starting at origin and going in some direction.

射线是一个无穷的线,开始于origin并沿着direction方向。

Variables变量

  • The origin point of the ray.
    射线的起点
  • The direction of the ray.
    射线的方向 

Constructors构造器

  • Creates a ray starting at origin along direction.
    创建一个新的射线,开始于origin沿着direction的方向。 

Functions函数

  • Returns a point at distance units along the ray.
    返回沿着射线在distance距离单位的点。 
  • Returns a nicely formatted string for this ray.
    返回该光线格式化好的字符串

Ray.GetPoint 获取点

function GetPoint (distance : float) : Vector3

Description描述

Returns a point at distance units along the ray.

返回沿着射线在distance距离单位的点。

  1.  
    using UnityEngine;
  2.  
    using System.Collections;
  3.  
     
  4.  
    public class example : MonoBehaviour {
  5.  
    public Ray r;
  6.  
    public void Awake() {
  7.  
    print(r.GetPoint(10));
  8.  
    }
  9.  
    }

Ray.ToString 转字符串

function ToString () : string
function ToString (format : string) : string

Description描述

Returns a nicely formatted string for this ray.

返回该光线格式化好的字符串。

Physics.Linecast 线性投射

static function Linecast (start : Vector3, end : Vector3, layerMask : int = kDefaultRaycastLayers) : bool

Description描述

Returns true if there is any collider intersecting the line between start and end.

从开始位置到结束位置做一个光线投射,如果与碰撞体交互,返回真。

  1.  
    using UnityEngine;
  2.  
    using System.Collections;
  3.  
     
  4.  
    public class example : MonoBehaviour {
  5.  
    public Transform target;
  6.  
    void Update() {
  7.  
    if (!Physics.Linecast(transform.position, target.position))
  8.  
    ProcessData.AndDoSomeCalculations();
  9.  
     
  10.  
    }
  11.  
    }

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

可以根据Layer mask层的不同来忽略碰撞体。

• static function Linecast (start : Vector3, end : Vector3, out hitInfo : RaycastHit, layerMask : int = kDefaultRaycastLayers) : bool

Description描述

Returns true if there is any collider intersecting the line between start and end.

从开始位置到结束位置做一个光线投射,如果与碰撞体交互,返回真。

If true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit). Layer mask is used to selectively ignore colliders when casting a ray.

如果交互到碰撞体,光线投射返回一个RaycastHit结构体信息。可以根据Layer mask层的不同来忽略碰撞体。

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[]

Description描述

Casts a ray through the scene and returns all hits.

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

  1.  
    function Update () {
  2.  
    var hits : RaycastHit[];
  3.  
    hits = Physics.RaycastAll (transform.position, transform.forward, 100.0);
  4.  
     
  5.  
    // Change the material of all hit colliders
  6.  
    // to use a transparent Shader
  7.  
    //改变所有碰到碰撞器的材质,使用透明的着色器
  8.  
    for (var i = 0;i < hits.Length; i++) {
  9.  
    var hit : RaycastHit = hits[i];
  10.  
    var renderer = hit.collider.renderer;
  11.  
    if (renderer) {
  12.  
    renderer.material.shader = Shader.Find("Transparent/Diffuse");
  13.  
    renderer.material.color.a = 0.3;
  14.  
    }
  15.  
    }
  16.  
    }

Note: This function will return false if you cast a ray from inside a sphere to the outside; this in an intended behaviour.

注意:如果从一个球型体的内部到外部用光线投射,返回错误。

Physics.Raycast 为投射射线的碰撞检测,长度可为Infinity(无穷大),返回值为一个bool值

Physics.Linecast 投射的是一条线段,有开始值和结束值,返回值也为bool

Physics.RaycastAll 投射的是一条射线,但返回值为RancastHit的一个结构体

c

d

unity ray和line射线检测的更多相关文章

  1. Unity - Raycast 射线检测

    本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...

  2. Unity射线检测的用法总结

    RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  3. unity射线检测

    unity中射线检测时非常实用也经常实用的一种手段.下面讲解一下射线检测问题. 1)Ray 根据射线端点和射线的方向定义一条射线 Ray ray= new Ray(transform.position ...

  4. 日常小节----unity小坑记(射线检测固定层级)

    unity中射线检测需设定所需层级时,必须加上距离!!! //一条从主相机到屏幕点击点的射线 Ray ray = Camera.Main.ScreenPointToRay(Input.mousePos ...

  5. Unity——射线检测(鼠标点击开关门效果)

    Unity射线检测--实现简单的开关门效果 简要:通过鼠标点击来发射一条射线,来获得射线所碰到的物体名称,再通过改变门的Rotation值来实现开关门的效果. 一.代码实现 1.1 简易的场景搭建 注 ...

  6. Unity的学习笔记(射线检测)

    首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚: 接下来是自己使用这个进行测试 using System.Collections; using System.Collections. ...

  7. Ray射线检测和Recources.Load

    记录射线检测常用的方法,以及Rocources.Load的常用用法 使用代码实现鼠标点击在鼠标点击处生成制定gameObject RayCastHit hit; void Update() { Ray ...

  8. pico g2 触摸板手柄射线检测---for unity

    1.pico g2手柄射线检测UI,需要在canvas添加Graphic Raycaster脚本和Pvr_Ui Canvas脚本. 2.删除掉原有的maincamera,将Pvr_unitySDK下h ...

  9. Unity3D_(API)射线检测Raycast()

    Unity射线检测官方文档: 传送门 一.检测前方是否有游戏物体(射线无限长度) 二.检测前方是否有游戏物体(射线长度为1m) 三.检测前方游戏物体碰撞信息(射线无限长度): 四.指定检测碰撞Tag层 ...

随机推荐

  1. spring-bean 版本的问题(报错:org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 75;)

    当XML中配置的xsd是4.0,而引用的包是4以下的spring-bean.jar时,当服务器能连网时没问题,不能连网时,就报以下类似错误: org.xml.sax.SAXParseException ...

  2. 【Alpha 冲刺】 1/12

    1. 任务明细及任务量 Alpha版本任务安排(非固化版本,视情况调整,若有遗漏,及时补充) 职务 姓名 预期负责的模块页面 模块页面/任务明细 难度系数(0~1)(根据UI/功能实现难度划分) 预计 ...

  3. 未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,

    未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft ...

  4. 没有插件的sublime编辑器是没有灵魂的

    这阵子各种捣鼓,现在趁有空记录一下sublime编辑器的一些实用的插件和安装方法,下午又该继续学习了. 接下来安装的是htmlHint.jsHint.cssLint以及汉化这几种插件,其实插件会使我们 ...

  5. 布局:上下两个div高度固定,中间自适应

    需求:经典布局 —— 头尾固定高度中间高度自适应布局 头部固定高度,宽度100%自适应父容器: 底部固定高度,宽度100%自适应父容器: 中间是主体部分,自动填满,浏览器可视区域剩余部分,内容超出则中 ...

  6. 声明式编程:程序=数据+逻辑(what)+算法(控制+计算)

    接口:what: 实现:算法:指令: 编程语言中,凡是不涉及到算法的部分,都可以认为是声明式编程. 命令式编程可以与算法划等号:算法要求严格的计算逻辑和控制,是实施细节的精准描述: 命令式编程与声明式 ...

  7. Android Bitmap Drawable byte[] InputStream 相互转换方法

    用android处理图片的时候,由于得到的资源不一样,所以经常要在各种格式中相互转化,以下介绍了 Bitmap Drawable byte[] InputStream 之间的转换方法: import ...

  8. 包、继承、Super、方法重写

    1 包_继承 1.1 包 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包可以看出目录. 包的作用 [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维护 [ ...

  9. 恶意代码技术第一二部分——P201421410029

    学   号:201421410029   中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告   实验四 恶意代码技术   ...

  10. leetcode-856 Score of Parentheses

    Given a balanced parentheses string S, compute the score of the string based on the following rule: ...