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

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

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

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

主要用到的工具类是:

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. Debug Assertion Failed!

    问题并没有解决..... 不知道怎么回事,先都没有这样的情况... VC++调程序出现如下错误: Debug   Assertion   Failed!       Program:   D:wyuS ...

  2. 自己安装的几个Eclipse插件

    http://eclipsenotepad.sourceforge.net This plugin has the simple objective to let developers write s ...

  3. JAVA面试题——JAVA基础篇

    1.JAVA多态的实现方式:继承.重载.覆盖 2.JAVA有8种基本数据类型:byte.short.int.long.float.double.boolean.char 3.final.finally ...

  4. leetcode@ [91] Decode Ways (Dynamic Programming)

    https://leetcode.com/problems/decode-ways/ A message containing letters from A-Z is being encoded to ...

  5. Bzoj-2705 Longge的问题 欧拉函数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2705 题意: 求 sigma(gcd(i,n), 1<=i<=n<2^3 ...

  6. 【现代程序设计】【Homework-01】

    1维的最大子数组之和 对于1维的最大子数组之和 假设f[i]表示:对于1..i这个序列中,包含i这个元素的最大序列的值 则对于f[i],0<i<=n; 应该有 f[i]=max(a[i], ...

  7. 解决IE6不支持fixed

    /* IE6 是不支持position:fixed的,解决如下*/.right-bar{ _position:absolute;_top:expression(eval(document.docume ...

  8. ZZTHX-线程锁

    以前一直在做卡乐付,悲剧的是项目中的余额查询,超级转账和刷卡器相关的东西已经开发好了,我对这块还是比较好奇和感兴趣的,在项目空闲的时候我就开始尝试熟悉和了解这块的业务和代码.实践出真理,只有在实践中才 ...

  9. iOS 改变tableview cell的背景色

    cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame]; cell.selectedBackgroundView ...

  10. android常见错误--INSTALL_FAILED_DEXOPT

    出现上面的问题,是由于手机的内存不足导致的,需要清理一下手机的内存,然后就可以了