-
unity 射线特性测试
上面方块分别添加
绿色 BoxCollider2D Rigidbody2D
黑色 BoxCollider Rigidbody
黄色 Rigidbody2D
蓝色 无
红色 BoxCollider2D
然后我们通过以下代码设置一条2d射线用来测试
private LineRenderer line; Vector3 mousePos = Input.mousePosition; Vector3 screenToWorld = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, -Camera.main.transform.position.z)); Ray2D ray = new Ray2D(screenToWorld, Vector2.up); Debug.DrawRay(ray.origin, ray.direction, Color.blue, 1.0f); RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction, 0.1f); if (info.collider != null)//如果发生了碰撞 { GameObject obj = info.collider.gameObject; Debug.Log(obj.name); }
结果是只有绿色和红色可以接收到碰撞
然后我们重新写一段3d射线用来新的测试
Vector3 mousePos = Input.mousePosition; Vector3 screenToWorld = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, -Camera.main.transform.position.z - 0.5f)); RaycastHit hit; Ray ray = new Ray(screenToWorld, Vector3.forward); Debug.DrawRay(ray.origin, ray.direction, Color.blue, 1.0f); if (Physics.Raycast(ray, out hit)) { Debug.Log(hit.collider.gameObject.name); }
结果只有黑色可以检测到
特性1:2d射线只能检测2d碰撞体,同样3d射线只能检测3d碰撞体,射线只能对有对应有碰撞体的对象产生反馈
把复制一个3d黑色方块把z轴减小1个单位,然后把原3d黑色方块放大2.5倍,使得小方块在后方
将绿色的2d方块放大2倍置于红色2d方块之上
重复上面的射线操作
小的黑色方块无法被检测到, 红色方块无法被检测到
出处:https://www.cnblogs.com/xyfbj/p/17262506.html
然后我们给大小黑色方块,绿色红色方块分别添加mask 8, 9
// 2d部分 RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction, 0.1f, 1<<9); // 3d部分 if (Physics.Raycast(ray, out hit, 10f, 1<<9))
再去重复上面的动作,小的黑色方块可以被检测到,红色方块也可以被检测到
如果不设置长度,那么射线是一条可以无限延长,任意穿透的线,在不设置指定图层的情况下,只对离得最近的碰撞体优先反馈,当设置mask情况下,对指定mask的图层进行反馈
有时候2d游戏可能需要针对鼠标进行检测,必然道具,或者人物,这个时候如果用3d射线指向外进行2d检测是无法进行检测的
因此,唯一办法是随时给鼠标一个做的非常短比如0.05f的检测射线,然后指向上,来替代,之后再通过mask来判断需要检测的范围,ui还是物体,还是其他对象
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数