射线检测是很常用的一种触屏操控模型的方式,但是简单的发射射线检测物体身上的碰撞器,对于模型多、复杂度高的场景,会出现因遮挡导致无法触碰到应检测的物体。例如:需求是点击屏幕,选中场景中的物体,物体随手指或鼠标位置移动,拖拽到指定位置后抬起手指或鼠标左键,若拖动物体与目标位置一致则进行下一步,否则物体回到原位。这一需求当然有很多方法,比如判断物体与目标位置距离,但是这种方法若在平面识别后的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的物体相关推荐

  1. [Unity][射线检测]检测两个物体之间是否有其他物体阻挡

    1.用Physics.Raycast进行射线检测 物体必须有Collider碰撞组件. //定义一条射线,起点为GO1的物体坐标,终点为GO2的物体坐标 Ray ray = new Ray(GO1.t ...

  2. unity 射线检测 碰撞点不准确的原因分析

    unity 射线检测 碰撞点不准确的原因分析 射线检测的时候,出现了碰撞的那个点位置总是上下不准确,但屏幕中心位置不受影响,越远离中心,越偏移. 无论是用鼠标,还是ui上的坐标都不准确. 下面是代码 ...

  3. Unity射线检测的用法总结

    RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  4. unity射线检测高速飞行的子弹是否打到敌人

    利用射线检测,检测两帧子弹位置连线是否碰撞敌人,并改变敌人状态. 控制敌人射出的子弹的类如下: using System.Collections; using System.Collections.G ...

  5. 《Unity 射线检测》球形方向投射

    球形方向投射有两种. 1.Physics.SphereCast 粗略的返回碰撞信息以及碰撞到的第一个碰撞详细信息,如果不需要获得全部的碰撞信息的话,可以用这个. 2.Physics.SphereCas ...

  6. 【Unity】射线检测

    射线检测,发射一条射线检测射线是否碰撞到物体,同时可以获取物体的相关属性 射线可以是有长度的,也可以是不限长度的 射线检测的条件,物体必须有碰撞器 实现射线检测的简单代码,将脚本挂在物体上,当物体前方 ...

  7. 射线检测算法在游戏中应用

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  8. 直播笔记 | Unity中射线检测详解

    本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记. 完整录播:https: ...

  9. Unity学习之Physic.Raycast(射线检测)个人理解分享

    Physics.Raycast参数 public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitIn ...

  10. Unity中的射线检测

    using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lesson23 ...

最新文章

  1. 其实win10要比win7的安全性强很多
  2. tensorflow调试打印
  3. activeRecord 绑定属性的属性
  4. 2017 清北济南考前刷题Day 2 afternoon
  5. Error:Unable to resolve target android-19
  6. ab plc编程软件_三菱PLC编程程序PLC的软件编程
  7. Highcharts 中文参考文档
  8. 云原生乘风者联合征文活动——说出你和「阿里云云原生」的故事
  9. android 再按一次退出程序
  10. Linux下怎么做秒执行任务
  11. 焦虑的移动互联网开发者如何破局?专题解析
  12. 人工智障学习笔记——强化学习(4)时间差分方法
  13. Gstreamer的一些基本概念与A/V同步分析
  14. 每一段感情结束后,是男方放下的快,还是女方放下的快?
  15. Matlab常用的标记符号和颜色
  16. iphone mac地址是否随机_iPad 的 Mac 地址是否会随机更换,如何关闭呢
  17. java播放加密后的wav文件,使用Java实时同时播放WAV文件
  18. linux下如何查看网卡ip,linux下如何查看某个网卡当前使用的IP
  19. 英飞凌TC297 PSPR与DSPR
  20. MongoDB客户端命令总结

热门文章

  1. excel 如何批量删除必表中的空白行
  2. easyUI 上传文件
  3. sql更新语句中update set from用法
  4. 计算机显示屏显示超出屏幕大小,电脑连接的显示器出错显示超出工作频率范围怎么恢复...
  5. 给出a-z,0-9,输出所有的3个字符的组合
  6. 南大计算机学硕复试,2017年南京大学计算机科学与技术系考研复试名单
  7. export_savedmodel
  8. 基于用户标签的时间衰减因子
  9. 无奈人心渐开明 贪嗔痴恨爱恶欲
  10. html以鼠标为中心放大网页,鼠标滚轮网页放大缩小