这里来记录下射线检测的相关内容:

射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真。

射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候可以跳起。

        射击游戏中可以通过定长射线去判断目标物体是否被击中,等

主要用到的工具类是:

Physics

RaycastHit 光线投射碰撞

Ray 射线

第一种是:

Physics.Linecast 线性投射

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

        Debug.DrawLine(transform.position, Line_floor.position, Color.red, 1f);
bool grounded = Physics.Linecast(transform.position, Line_floor.position, << LayerMask.NameToLayer("Ground"));
        if (grounded)
{
Debug.LogError("发生了碰撞"); }
else {
Debug.LogError("碰撞结束");
}

第二种:

在场景中投下可与所有碰撞器碰撞的一条光线。可控制投射方向和投射长度

 Vector3 fwd = transform.TransformDirection(-Vector3.up);
bool grounded = Physics.Raycast(transform.position,fwd, );
        if (grounded)
{
Debug.LogError("发生了碰撞"); }
else {
Debug.LogError("碰撞结束");
}

第三种:

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

    RaycastHit hit;
bool grounded = Physics.Raycast(transform.position, -Vector3.up, out hit);
// 可控制投射距离bool grounded = Physics.Raycast(transform.position, -Vector3.up, out hit,100.0);
if (grounded)
{
Debug.LogError("发生了碰撞");
Debug.LogError("距离是:" + hit.distance);
Debug.LogError("被碰撞的物体是:" + hit.collider.gameObject.name); }
else {
Debug.LogError("碰撞结束");
}

注意,这里返回的碰撞器的信息是依次的,先返回第一个碰撞的,第一个碰撞结束后才返回第二个。

第四种:

Physics.RaycastAll 所有光线投射

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

        RaycastHit[] hits;
hits = Physics.RaycastAll(transform.position, -Vector3.up, 100.0F);
int i = ; while (i < hits.Length)
{
Debug.LogError("发生了碰撞");
RaycastHit hit = hits[i];
Debug.LogError("被碰撞的物体是:" + hit.collider.gameObject.name);
i++;
}

第五种:

控制碰撞的层,可以设置射线的长度,并且用debug查看射线的长度。

使用层的时候,要注意,要给别的对象也附上层的名字,不能用缺省,会出问题。

          RaycastHit hit;
// Debug.DrawLine()
bool grounded = Physics.Raycast(transform.position, transform.up, out hit, 10000f, << LayerMask.NameToLayer("Diren"));
Debug.DrawRay(transform.position, transform.up * 10000f, Color.red);
if (grounded)
{
Debug.LogError("发生了碰撞");
Debug.LogError("距离是:" + hit.distance);
Debug.LogError("被碰撞的物体是:" + hit.collider.gameObject.name); }
else {
Debug.LogError("碰撞结束");
}

第五种:

Physics.OverlapSphere 相交球

返回球型半径之内(包括半径)的所有碰撞体 collider[]。可用于拾取物品用。

   Collider[] col =  Physics.OverlapSphere(transform.position,1f,  << LayerMask.NameToLayer("zhuangbei"));
if (col.Length > )
{
foreach (Collider zhuangbei in col)
{
zhuangbei.gameObject.GetComponent<Renderer>().material.color = Color.red;
}
}

Unity3D 之射线检测的更多相关文章

  1. 【Unity3D】枪战游戏—发射子弹、射线检测

    一.子弹的碰撞检测: 因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了. 因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处 ...

  2. Unity3D 5.0简单的射线检测实现跳跃功能

    这里是一个简单的跳跃,5.0和其他版本貌似不一样,并且,再起跳功能做的不完全. 不过一个基本的思路在这里. 1.首先,射线检测,这里是利用一个空对象,放到主角对象的下面 2.然后调节射线的位置,在主角 ...

  3. UGUI射线检测

    1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会自动挂上). Ignor ...

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

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

  5. U3D学习10——关节和射线检测

    1.弹簧  2.铰链  3.固定关节  4.角色关节  5.自定义关节  6.raycast和raycasthit 射线有位移参数,可以设定只触发某一层的. 7.射线检测用于高速和精确 update是 ...

  6. Layabox 3D游戏开发学习笔记---射线检测,鼠标控制物体运动

    核心要点:3D物体碰撞是靠射线检测,射线与碰撞器相撞获取对应的碰撞点信息. class RayPicking03 { private ray: Laya.Ray; private point: Lay ...

  7. 【转】 [UnityUI]UGUI射线检测

    http://blog.csdn.net/lyh916/article/details/50947026 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂 ...

  8. Unity - Raycast 射线检测

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

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

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

随机推荐

  1. Java 8 中 CAS 的增强

    几天前,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因 ...

  2. 说说通信设置方式之hostonly

    Vmnetcfg.exe是配置它的网络. 虚拟机,虚拟出来有两个.VMnet1和VMnet8. ************************若用hostonly,则需要将VMnet1给启用.*** ...

  3. JS 格式化日期

    function formatDate(date){ var year=date.getFullYear(); var month=date.getMonth()+1; var date=date.g ...

  4. [Objective-c 基础 - 2.11] SEL数据类型

    A.概念 1.SEL类型代表方法 2.每个方法都有一个对应的SEL类型的数据 3.实例对象调用方法 (1)编译器会把类的方法包装成SEL类型的数据, (2)根据SEL数据找到方法地址,缓存此地址 (3 ...

  5. iOS CAShapeLayer精讲

    前言 CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性.但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义. 关于UIBezierPath,请阅读文章:i ...

  6. FreeModbus Slave 改进的eMbPoll()【worldsing 笔记】

    eMbPoll()的作用是FreeMod协议通信过程中不断查询事件对列有无完速数据桢,并进行地址和CRD验证,最后运行和回复主机. 为了减小代码尺寸对eMbPoll进行改进: 原版: 1:  2: e ...

  7. 也谈SSO,一个简单实用的单点登录Demo

    关于SSO(单点登录),百度百科解释如下 : “SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要 ...

  8. uploadPreview 兼容多浏览器图片上传及预览插件使用

    uploadPreview兼容多浏览器图片上传及预览插件 http://www.jq22.com/jquery-info2757 Html 代码 <div class="form-gr ...

  9. Web- 一些标签样式

    网上找来的.有点用 1.只有下划线的文本框:<input style="border:0;border-bottom:1 solid black;background:;"& ...

  10. java线程知识点

    1. 进程与线程 一个进程拥有多个线程,多个线程共享进程的内存块.操作系统不分配新的内存,因此线程之间通信很容易.不同的进程因处于不同的内存块,因此进程之间通信较为困难. 进程:每个进程都有独立的代码 ...