RayCast 射线检测


本文提供全流程,中文翻译。

Chinar 坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)


Chinar —— 心分享、心创新!

助力快速理解 Unity 中射线检测的基本用法

为新手节省宝贵的时间,避免采坑!

Chinar 教程效果:


  • 1

    • Raycast —— 射线检测
  • 2
    • Scritps —— 脚本
  • 3
    • Effect —— 效果
  • 4
    • Extend —— 扩展
  • 支持
    • May Be —— 搞开发,总有一天要做的事!

全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

Raycast —— 射线检测

Unity 中提供了一种控制方案,用以检测鼠标点在屏幕上后

具体点在了 Unity 场景中,三维世界的哪个点上

用法上多种多样,在这里就不一一列举了,尽以检测到的点来做一个总结

这种解决方案,就是射线检测

通过鼠标点击屏幕,由屏幕点,向Unity三维直接发射一条无限长的射线

当检测到碰撞物体后,会返回被碰撞物体的所有信息,以及交点信息等等….

这里我用简单的划线来方便理解


2

Scritps —— 脚本

创建一个地板,和一个小球,作为简单的场景用于测试

讲脚本挂载空物体上,并在 Inspector 面板将小球拖进Ball

具体代码如下

using UnityEngine;
using UnityEngine.AI;/// <summary>
/// 射线检测类
/// </summary>
public class ChinarRayCast : MonoBehaviour
{public Transform Ball; //小球(用来标记坐标)//设置射线在Plane上的目标点targetprivate Vector3 target;void Update(){if (Input.GetMouseButton(1)) //点击鼠标右键{object     ray = Camera.main.ScreenPointToRay(Input.mousePosition); //屏幕坐标转射线RaycastHit hit;                                                     //射线对象是:结构体类型(存储了相关信息)bool       isHit = Physics.Raycast((Ray) ray, out hit);             //发出射线检测到了碰撞   isHit返回的是 一个bool值if (isHit){Debug.Log("坐标为:" + hit.point);target = hit.point; //检测到碰撞,就把检测到的点记录下来}}//如果检测到小球的坐标 与 碰撞的点坐标 距离大于0.1f,就移动小球的位置到 碰撞的点 :targetBall.position = Vector3.Distance(Ball.position, target) > 0.1f ? Vector3.Lerp(Ball.position, target, Time.deltaTime) : target;//Move(target);//以上是Move函数的简写,此函数可不调用}/// <summary>/// 移动方法/// </summary>/// <param name="target"></param>void Move(Vector3 target){if (Vector3.Distance(Ball.position, target) > 0.1f){Ball.position = Vector3.Lerp(Ball.position, target, Time.deltaTime);}//如果物体的位置和目标点的位置距离小于 0.1时直接等于目标点elseBall.position = target;}
}

3

Effect —— 效果

通过邮件点击,可以查看最终效果


4

Extend —— 扩展

射线检测的牛逼之处在于,只要发出的射线与 带有碰撞盒 的物体,都会发生碰撞

并可以返回各种信息,例如被碰撞物体的 位置、名称、法线 等等一系列的数据

另外可以 自定义发出射线的 距离、影响到的图层 等等

/// <summary>
/// 射线检测
/// </summary>
public class ChinarRay : MonoBehaviour
{void Update(){Ray        ray = new Ray(transform.position, Vector3.down); //创建一条射线对象RaycastHit hit;                                             //碰撞信息对象结构体bool       isRaycast = Physics.Raycast(ray, out hit);if (isRaycast){Debug.DrawLine(ray.origin, hit.point, Color.green);print("坐标" + hit.transform.position);print("点" + hit.point);print("重心坐标" + hit.barycentricCoordinate);print("碰撞盒" + hit.collider);print("距离" + hit.distance);print("光线地图坐标" + hit.lightmapCoord);print("法线" + hit.normal);print("刚体" + hit.rigidbody);print("纹理坐标" + hit.textureCoord);print("三角指数" + hit.triangleIndex);//等等}}
}

支持

May Be —— 搞开发,总有一天要做的事!

拥有自己的服务器,无需再找攻略!

Chinar 提供一站式教程,闭眼式创建!

为新手节省宝贵时间,避免采坑!

先点击领取 —— 阿里全产品优惠券 (享受最低优惠)

1 —— 云服务器超全购买流程 (新手必备!)

2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

3—— Windows 服务器配置、运行、建站一条龙 !

4 —— Linux 服务器配置、运行、建站一条龙 !




<script type="math/tex" id="MathJax-Element-1"> </script>
技术交流群:806091680 ! Chinar 欢迎你的加入


END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

Unity射线检测的用法总结相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. Unity 射线与碰撞范围检测【踩坑记录】

    射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有 ...

  8. Unity中的射线检测

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

  9. Unity 2019 射线检测失效

    之前在做毕设的一个FPS游戏时,遇到了使用射线检测失效的情况,特此记录以下. 前因 在FPS游戏中,对于子弹的发射主要通过两种方式来实现. 一种可以通过实例化子弹的GameObject对其施加物理效果 ...

最新文章

  1. 读《程序员必读的职业规划书》
  2. python绘制3d动态模型_怎么用python把*.obj文件里面的3D模型特征提取出来?
  3. 201771010102 常惠琢 《2018面向对象程序设计(Java)》第9周学习总结
  4. 大牛带你学优化~案例进阶Mysql优化
  5. 解决ansible报错“msg“: “Failed to import docker-py - cannot import name __version__.
  6. laravel mysql视图,在 Laravel 视图文件中引入 bootstrap
  7. 数据结构与算法--二叉树的深度问题
  8. lammps软件_Lammps模型构建的方法之一:组合模型构建
  9. 数据平台、大数据平台、数据中台……还分的清不?
  10. 抢头条offer机会,抖音面试题:网络编程Socket+GC Roots+数据同步+Redis等
  11. JSP之jstl标签库
  12. 【Remoting-4】
  13. 使用wps插件,实现word转PDF
  14. 地理空间坐标系统-城市坐标系与国家统一坐标系之间的转换(含四参数转换代码)
  15. 批改网复制粘贴_如何使用批改网组织线上考试
  16. html css图片展开动画,9种CSS3炫酷图片预览展示动画特效
  17. Python爬虫——使用三种方法来爬取酷狗音乐的TOP榜
  18. Android安卓手机版火狐浏览器设置简洁主页
  19. html网页的主题标签是什么6,HTML标签以及各个标签属性大全(网页制作必备)
  20. Vue--Vuex--使用/教程/实例

热门文章

  1. 沉睡者IT - 关于知乎好物赚钱方法都在这里了
  2. Unity---toast提示
  3. 谷歌搜索引擎排名规则(谷歌 seo 外链重要还是内容重要)
  4. 什么是ASP?教你如何学ASP编程
  5. S905X3安卓9.0如何添加 手柄驱动
  6. 钢琴转谱技术(MP3转MIDI)
  7. 好玩!开源 Switch 模拟器!
  8. 凯撒密码加密、解密、暴力破解(C语言实现)
  9. MaXFlow分子模拟与人工智能平台
  10. WindbgX64和WinxpSp3虚拟机双击调试的参数设置