Unity射线检测指定Layer的物体
射线检测是很常用的一种触屏操控模型的方式,但是简单的发射射线检测物体身上的碰撞器,对于模型多、复杂度高的场景,会出现因遮挡导致无法触碰到应检测的物体。例如:需求是点击屏幕,选中场景中的物体,物体随手指或鼠标位置移动,拖拽到指定位置后抬起手指或鼠标左键,若拖动物体与目标位置一致则进行下一步,否则物体回到原位。这一需求当然有很多方法,比如判断物体与目标位置距离,但是这种方法若在平面识别后的AR场景中,会出现在某一观看角度上,模型与目标位置一致,而转到另一角度会发现存在位置差,导致无法正确判断是否拖动到指定位置。
那么射线检测的方式处理这一问题,原理上需要在目标位置放一个不渲染纹理网格的碰撞器,然后需要发射两条射线,手指或鼠标按下时一条射线,检测点击的物体并做拖动,抬手时一条射线检测是否是目标位置。这里有个问题,如果简单的发射射线,那么如果物体距离相机比目标位置距离相机近,即把物体拖动到目标位置后,物体在目标位置的碰撞器与相机之间,那么抬手时发射的射线将会检测到拖动的物体,而不是目标位置的碰撞器。因此要使用带有层级检测的射线。
if (Input.GetMouseButtonUp(0)){RaycastHit raycastHit;Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out raycastHit, 1000f, 1 << LayerMask.NameToLayer("TargetPosition"))){if (raycastHit.transform.name.Equals("TargetPosition")){Debug.Log("-----------------");}}}
将目标位置的碰撞器的Layer层级设置为TargetPosition,那么在抬起鼠标时发射的射线将只检测Layer为TargetPosition的物体。
Unity射线检测指定Layer的物体相关推荐
- [Unity][射线检测]检测两个物体之间是否有其他物体阻挡
1.用Physics.Raycast进行射线检测 物体必须有Collider碰撞组件. //定义一条射线,起点为GO1的物体坐标,终点为GO2的物体坐标 Ray ray = new Ray(GO1.t ...
- unity 射线检测 碰撞点不准确的原因分析
unity 射线检测 碰撞点不准确的原因分析 射线检测的时候,出现了碰撞的那个点位置总是上下不准确,但屏幕中心位置不受影响,越远离中心,越偏移. 无论是用鼠标,还是ui上的坐标都不准确. 下面是代码 ...
- Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- unity射线检测高速飞行的子弹是否打到敌人
利用射线检测,检测两帧子弹位置连线是否碰撞敌人,并改变敌人状态. 控制敌人射出的子弹的类如下: using System.Collections; using System.Collections.G ...
- 《Unity 射线检测》球形方向投射
球形方向投射有两种. 1.Physics.SphereCast 粗略的返回碰撞信息以及碰撞到的第一个碰撞详细信息,如果不需要获得全部的碰撞信息的话,可以用这个. 2.Physics.SphereCas ...
- 【Unity】射线检测
射线检测,发射一条射线检测射线是否碰撞到物体,同时可以获取物体的相关属性 射线可以是有长度的,也可以是不限长度的 射线检测的条件,物体必须有碰撞器 实现射线检测的简单代码,将脚本挂在物体上,当物体前方 ...
- 射线检测算法在游戏中应用
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- 直播笔记 | Unity中射线检测详解
本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记. 完整录播:https: ...
- Unity学习之Physic.Raycast(射线检测)个人理解分享
Physics.Raycast参数 public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitIn ...
- Unity中的射线检测
using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lesson23 ...
最新文章
- 其实win10要比win7的安全性强很多
- tensorflow调试打印
- activeRecord 绑定属性的属性
- 2017 清北济南考前刷题Day 2 afternoon
- Error:Unable to resolve target android-19
- ab plc编程软件_三菱PLC编程程序PLC的软件编程
- Highcharts 中文参考文档
- 云原生乘风者联合征文活动——说出你和「阿里云云原生」的故事
- android 再按一次退出程序
- Linux下怎么做秒执行任务
- 焦虑的移动互联网开发者如何破局?专题解析
- 人工智障学习笔记——强化学习(4)时间差分方法
- Gstreamer的一些基本概念与A/V同步分析
- 每一段感情结束后,是男方放下的快,还是女方放下的快?
- Matlab常用的标记符号和颜色
- iphone mac地址是否随机_iPad 的 Mac 地址是否会随机更换,如何关闭呢
- java播放加密后的wav文件,使用Java实时同时播放WAV文件
- linux下如何查看网卡ip,linux下如何查看某个网卡当前使用的IP
- 英飞凌TC297 PSPR与DSPR
- MongoDB客户端命令总结