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

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

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

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

主要用到的工具类是:

Physics

RaycastHit 光线投射碰撞

Ray 射线

第一种是:

Physics.Linecast 线性投射

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

Debug.DrawLine(transform.position, Line_floor.position, Color.red, 1f);bool grounded = Physics.Linecast(transform.position, Line_floor.position, 1 << LayerMask.NameToLayer("Ground"));

if(grounded)

{

Debug.LogError("发生了碰撞");

}else{

Debug.LogError("碰撞结束");

}

第二种:

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

Vector3 fwd = transform.TransformDirection(-Vector3.up);bool grounded = Physics.Raycast(transform.position,fwd, 10 );

if(grounded)

{

Debug.LogError("发生了碰撞");

}else{

Debug.LogError("碰撞结束");

}

第三种:

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

RaycastHit hit;bool grounded = Physics.Raycast(transform.position, -Vector3.up, outhit);//可控制投射距离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 = 0;while (i

{

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, 1 << 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, 1 << LayerMask.NameToLayer("zhuangbei"));if (col.Length > 0)

{foreach (Collider zhuangbei incol)

{

zhuangbei.gameObject.GetComponent().material.color =Color.red;

}

}

2d unity 多物体 射线_Unity3D 之射线检测相关推荐

  1. 2d unity 多物体 射线_24小时入门Unity游戏开发系列教程

    版权声明: 本系列教程来自Unity Game Development in 24 Hours, Sams Teach Yourself(出版日期:2013年12月6日) 教程内容仅供个人学习参考,版 ...

  2. Unity 射线与碰撞范围检测【踩坑记录】

    射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有 ...

  3. 射线与OBB相交检测

    在上一篇 射线与AABB相交检测 射线与OBB3D 相交检测的原理跟射线与AABB相交检测的原理相同,本篇不再讲解原理 上篇推论出:射线与平面相交点距离射线起点距离t的距离公式为 t = (d - D ...

  4. Unity 给物体加贴图

    如何给物体贴图纸 下载图片 打开Unity 创建物体 导入资源 贴图 新春祝福 下载图片 首先在网上下载几个图片,比如草地: 首先在网上下载下来 打开Unity 然后打开Unity,新建一个项目 创建 ...

  5. [Unity]3D物体透明化方法透明材质球

    Default-Skybox,Shader:Skybox/Procedural 使用透明材质 1.使用自带的天空盒材质 新建3D物体,自带是初始材质 将其替换成如上图所示的Default-Skybox ...

  6. 射线跟踪(递归射线跟踪)

    射线跟踪(递归射线跟踪) 1.简介 •现在,我们将考虑全球方面 •合并间接反射和发射光 •我们将考虑最常用的模型:射线跟踪 •图显示了从光线追踪的抽象光线,但这不是射线追踪的工作方式- 其他几点: • ...

  7. 射线与AABB相交检测

    Box2D使用了一个叫做 slab 的碰撞检测算法. 在2D中AABB是一个矩形边界框,slab 指的是矩形一组平行线之间的范围,所以在2D中矩形边界框四条边,两两一组,可以组成两个 slab. 如下 ...

  8. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

  9. unity给物体更改颜色

    unity给物体更改颜色 新建一个你要绑定的物体,如cube,在cube下新建script脚本: using System.Collections; using System.Collections. ...

  10. Unity 控制物体移动的一些方法

    Unity 控制物体移动的一些方法 开坑, 回头慢慢补. 移动方法的总结. 1, 直接+=Vector3 transform.position += Vector3.forward * moveSpe ...

最新文章

  1. 如何获取字符串的最后一个字符?
  2. Compmgmtlauncher.exe问题解决方法
  3. freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
  4. 复旦大学邱锡鹏教授团队:Transformer最新综述
  5. 织梦ajax表单提交参数错误,【织梦二次开发】织梦jquery+ajax方式提交自定义表单...
  6. C#面试题整理(不带答案)
  7. JS 混合构造函数 和 动态原型
  8. Java 集合 之 Set
  9. 软件那么多,恢复数据还靠它
  10. PDF怎么转换成JPG图片?教你如何快速转换
  11. 联通笔试真题(有答案)
  12. 【Canvas】字体图标一、 Unicode 字体符号绘制 / 兼容IE
  13. 李宏毅机器学习 之 回归Regression(二)
  14. linux主分区扩容
  15. unity3D之简单的碰撞检测 .
  16. python人民币小写转大写_Python小程序人民币小写转大写辅助工具
  17. tyvj1172 自然数拆分Lunatic版
  18. 数据类型——计算华氏温度(C语言程序设计)
  19. 大白话 5 分钟带你走进人工智能:神经网络之反向传播详细案例及解释
  20. windows10关闭火绒开机自启动

热门文章

  1. Git详细教程(三):window系统下,使用Git Gui管理项目
  2. 【18日】foobox 1.0.1 (foobar2000 CUI配置)
  3. Verilog除法器的设计总结
  4. 24小时“凶宅试睡直播”去“凶”,阿里拍卖为卖凶宅有点拼
  5. Excel表的标题栏锁定
  6. Oracle语法限制,in内元素数量必须不大于1000
  7. 周记20180413
  8. 人工智能的安全、伦理和隐私问题
  9. 红胖子创业一年整总结:前二十年题记,萌芽初期,外包初期,创业初期,未来规划
  10. Java设计模式学习总结