2d unity 多物体 射线_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, 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 之射线检测相关推荐
- 2d unity 多物体 射线_24小时入门Unity游戏开发系列教程
版权声明: 本系列教程来自Unity Game Development in 24 Hours, Sams Teach Yourself(出版日期:2013年12月6日) 教程内容仅供个人学习参考,版 ...
- Unity 射线与碰撞范围检测【踩坑记录】
射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有 ...
- 射线与OBB相交检测
在上一篇 射线与AABB相交检测 射线与OBB3D 相交检测的原理跟射线与AABB相交检测的原理相同,本篇不再讲解原理 上篇推论出:射线与平面相交点距离射线起点距离t的距离公式为 t = (d - D ...
- Unity 给物体加贴图
如何给物体贴图纸 下载图片 打开Unity 创建物体 导入资源 贴图 新春祝福 下载图片 首先在网上下载几个图片,比如草地: 首先在网上下载下来 打开Unity 然后打开Unity,新建一个项目 创建 ...
- [Unity]3D物体透明化方法透明材质球
Default-Skybox,Shader:Skybox/Procedural 使用透明材质 1.使用自带的天空盒材质 新建3D物体,自带是初始材质 将其替换成如上图所示的Default-Skybox ...
- 射线跟踪(递归射线跟踪)
射线跟踪(递归射线跟踪) 1.简介 •现在,我们将考虑全球方面 •合并间接反射和发射光 •我们将考虑最常用的模型:射线跟踪 •图显示了从光线追踪的抽象光线,但这不是射线追踪的工作方式- 其他几点: • ...
- 射线与AABB相交检测
Box2D使用了一个叫做 slab 的碰撞检测算法. 在2D中AABB是一个矩形边界框,slab 指的是矩形一组平行线之间的范围,所以在2D中矩形边界框四条边,两两一组,可以组成两个 slab. 如下 ...
- Unity 实现物体破碎效果(转)
感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...
- unity给物体更改颜色
unity给物体更改颜色 新建一个你要绑定的物体,如cube,在cube下新建script脚本: using System.Collections; using System.Collections. ...
- Unity 控制物体移动的一些方法
Unity 控制物体移动的一些方法 开坑, 回头慢慢补. 移动方法的总结. 1, 直接+=Vector3 transform.position += Vector3.forward * moveSpe ...
最新文章
- 如何获取字符串的最后一个字符?
- Compmgmtlauncher.exe问题解决方法
- freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
- 复旦大学邱锡鹏教授团队:Transformer最新综述
- 织梦ajax表单提交参数错误,【织梦二次开发】织梦jquery+ajax方式提交自定义表单...
- C#面试题整理(不带答案)
- JS 混合构造函数 和 动态原型
- Java 集合 之 Set
- 软件那么多,恢复数据还靠它
- PDF怎么转换成JPG图片?教你如何快速转换
- 联通笔试真题(有答案)
- 【Canvas】字体图标一、 Unicode 字体符号绘制 / 兼容IE
- 李宏毅机器学习 之 回归Regression(二)
- linux主分区扩容
- unity3D之简单的碰撞检测 .
- python人民币小写转大写_Python小程序人民币小写转大写辅助工具
- tyvj1172 自然数拆分Lunatic版
- 数据类型——计算华氏温度(C语言程序设计)
- 大白话 5 分钟带你走进人工智能:神经网络之反向传播详细案例及解释
- windows10关闭火绒开机自启动