Unity3D 之射线检测
这里来记录下射线检测的相关内容:
射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真。
射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候可以跳起。
射击游戏中可以通过定长射线去判断目标物体是否被击中,等
主要用到的工具类是:
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 之射线检测的更多相关文章
- 【Unity3D】枪战游戏—发射子弹、射线检测
一.子弹的碰撞检测: 因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了. 因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处 ...
- Unity3D 5.0简单的射线检测实现跳跃功能
这里是一个简单的跳跃,5.0和其他版本貌似不一样,并且,再起跳功能做的不完全. 不过一个基本的思路在这里. 1.首先,射线检测,这里是利用一个空对象,放到主角对象的下面 2.然后调节射线的位置,在主角 ...
- UGUI射线检测
1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会自动挂上). Ignor ...
- Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...
- U3D学习10——关节和射线检测
1.弹簧 2.铰链 3.固定关节 4.角色关节 5.自定义关节 6.raycast和raycasthit 射线有位移参数,可以设定只触发某一层的. 7.射线检测用于高速和精确 update是 ...
- Layabox 3D游戏开发学习笔记---射线检测,鼠标控制物体运动
核心要点:3D物体碰撞是靠射线检测,射线与碰撞器相撞获取对应的碰撞点信息. class RayPicking03 { private ray: Laya.Ray; private point: Lay ...
- 【转】 [UnityUI]UGUI射线检测
http://blog.csdn.net/lyh916/article/details/50947026 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂 ...
- Unity - Raycast 射线检测
本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...
- Unity的学习笔记(射线检测)
首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚: 接下来是自己使用这个进行测试 using System.Collections; using System.Collections. ...
随机推荐
- HDU-4611 Balls Rearrangement 循环节,模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4611 先求出循环节,然后比较A和B的大小模拟过去... //STATUS:C++_AC_15MS_43 ...
- ALM11需求类型
- UI进阶 多线程
一.多线程概述 程序.进程.线程 程序:由源代码生成的可执行应用.(例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(例如:正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源 ...
- sql语句常见错误
1.两张表关联用的三种连接: left join .right join .inner join区别 (备注:两个表链接肯定是根据两个表(如A B)中的两个字段值(如A.bId和B.id),相等就行 ...
- [POLITICS] S Korea lawmakers vote to impeach leader
South Korea's Parliament has voted to impeach President Park Geun-hye. The National Assembly motion ...
- RStudio:R语言编辑器
RStudio:R语言编辑器 四窗口 左上:写代码,运行的方式是ctrl+Enter,或者用Run按钮 10 + 15 ## [1] 25 左下:终端,上面窗口的代码运行后会在这里显示,也可以直接在这 ...
- 【转】从开发者的角度看待各移动平台 ios/android/wp7/win8ost title
T_T 这伪技术博客都快给写成Tron的读书笔记专栏了,这样可不行欸~ 如今正是移动平台的战国时期,厌烦了去讨论移动平台的未来,也无意于在HTML5和Native App之间纠结.本文只从开发者纯技术 ...
- 理解CRC校验
举个最简单的例子,A向B发送一个数字,B如何检测数字在传输过程中有没有发生错误呢? A和B之间,定下一个协议,两边都知道一个除数X,A向B发送数字的时候,同时把余数附带后面发过去.比如,两边定的除数是 ...
- 从零开始学android开发-Json转换利器Gson之实例
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: h ...
- SQL书写技巧
SQL书写技巧: 1.针对分区表,如果可以使用分区条件的,一定要加分区条件.分区条件的使用,可以减少不必要的数据访问,加快查询数据,如TB_CSV_ACCEPT_FLOW_OPERATOR表,以acc ...