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. ...
随机推荐
- hdoj 2122 Ice_cream’s world III
并查集+最小生成树 Ice_cream’s world III Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- PHOTOSHOP 中画笔工具和铅笔工具的一个小小差别
今天在作图的时候偶然发现的一个以前并没有在意画笔和铅笔的小小区别,情况是这样的,我在做图像处理,需要一个单像素的闭合曲线灰度图来做实验,然后用画笔工具把直径调到1之后去作图,放大之后发现,跟预想的结果 ...
- java泛型 8 泛型的内部原理:类型擦除以及类型擦除带来的问题
参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首 ...
- R 语言画图的基本参数
R 语言画图的基本参数 点 点的种类 点的种类参数为 pch,每一种符号对应一个数字编号 # 点有25种,为了展示25种点 x = 1:25 y = 1:25 x ## [1] 1 2 3 4 5 6 ...
- Foxmail
我们在“POP3/SMTP服务”前面打钩,这样我们的QQ邮箱设置已经完成了,我们就可以在foxmail客户端上QQ邮箱了 QQ邮箱的POP3与SMTP服务器是什么? QQ邮箱 POP3 和 SMTP ...
- Java 判断是否为汉字 判断是否为乱码 判断字符串是否为双整型数字 整数 数字
/** * 判断是否为汉字 * * @param str * @return */ public static boolean isGBK(String str) { char[] ch ...
- IE下载打印文件的时候,下载打印闪一下就没有了
这是因为我们的浏览器没有将文件下载的自动提示设为启用.点击IE菜单栏中的“工具”—“Internet选项”-安全—可信站点—自定义级别 1,添加信任站点 打开IE浏览器,输入需要下载文件的地址 选择[ ...
- 安装Windows SDK7.1时发生的一个错误(附解决办法)
A problem occurred while installing selected Windows SDK components. Installation of the "Micro ...
- material-design-library
https://github.com/DenisMondon/material-design-library
- [Bootstrap] 6. Navigation
Too Much Navigation? How many of Bootstrap's Navigation Components can we use on a page? 0 1 More th ...