Unity射线检测(脚本)

Unity --- 射线检测 然后这个方法的参数中的第一个是我们发出的射线,第二个是射线发出的长度(此时其实就是线段,然后这个参数可写也可不写,不写的时候就是射线),第三个参数是规定能够进行射线碰撞检测的图层(上图中规定的是第10层,然后这个参数可写可不写,不写的话默认检测所有图层)这个射线检测中的射线是从摄像机中的小平面发出的(前面有说我们看到的游戏画面就是这个小平面上的画面,当我们在游戏画面上点击的时候,其实就相当于在小平面上点击)那么最关键的技术问题就是:当我们在游戏画面中点击某个位置的时候,我们如何找到游戏场景中的对应点呢? 阅读详情

知识点: 

1.虚拟轴

2.射线创建与检测

3.根据鼠标屏幕坐标返回射线,射线的起点在摄像机视口,射线方向摄像机朝向鼠标方向
  

题目: 

创建6个cube;鼠标选中cube,就让该cube旋转一个随机的角度,并朝正前方移动;
cube被二次点击,就被移除;

public class ScreenRay : MonoBehaviour
{
    List<Transform> dic = new List<Transform>();//用来存储点击过的对象
    // Use this for initialization
    void Start()
    {

    }
    // Update is called once per frame
    void Update()
    {
        //鼠标左键点击
        if (Input.GetButtonDown("Fire1"))
        {
            this.ScrRay();
                  
        }

        //移动点击过的对象(List<>)
        for (int i = 0; i < dic.Count; i++)
        {
            Move(dic[i]);
        }       
    }
   
    private void ScrRay()
    {
        //创建摄像机到鼠标位置的射线检测
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        Debug.DrawLine(ray.origin,ray.direction+ray.origin,Color.red);
        //存储碰撞成功返回的信息:相交点,距离,返回碰撞Transform,Collider,Rigidbody
        RaycastHit info;
        //射线检测:判断在ray射线方向中是否跟碰撞器发生相交,结束碰撞检测,返回true,同时把碰撞信息存到info里面,否则返回false
        if (Physics.Raycast(ray, out info))
        {
            //点击对象 如果发现物体存在List<>就销毁它(即二次点击才会触发)            
            for (int i=0;i<dic.Count;i++) {
                if (dic[i].transform.name == info.transform.name) {
                    dic.Remove(dic[i]);
                    Destroy(info.transform.gameObject);
                    return;                    
                }
            }
            //该物体没有就添加到List<>中,并将它的角度随机旋转
            dic.Add(info.transform);
            info.transform.Rotate(Random.Range(0, 360), Random.Range(0, 360), Random.Range(0, 360));

        }

    }
    //向自己的正前方移动
    private void Move(Transform info)
    {        
            info.transform.Translate(info.transform.forward * 2 * Time.deltaTime, Space.World);              
    }
}

 

Unity射线有时失灵,检测失效原因及解决办法 先写总结,如果看总结能懂就不用往下看了,不懂就再看看吧: 假设要对一个正在移动中的比较小的(注意!!是比较小的,大的看不出来,大的即使晚更新几帧肉眼也看不出来)物体A进行射线检测。如果出现射线有时判true,有时判false。可能是以下原因。 首先,只有在FixedUpdate执行完后才会更新物理,此处说的更新物理是更新碰撞体的意思。 FixedUpdate是固定帧更新,默认1秒执行50次。... 阅读详情

相关推荐

unity鼠标悬停显示物品名称

使用射线方法实现显示物品名称界面1、在场景中创建几个物体,重写命名并创建一个新物体用来挂载脚本,调整好物体距离和摄像机画面,尽可能将需要的物体全部显示。2、新建一个脚本,挂载到GameObject上。脚本1.复制粘贴,别忘了看自己脚本名称和类名是否相同2.保存运行unity场景总结 界面 1、在场景中创建几个物体,重写命名并创建一个新物体用来挂载脚本,调整好物体距离和摄像机画面,尽可能将需要的物体全部显示。 2、新建一个脚本,挂载到GameObject上。 脚本 1.复制粘贴,别忘了看自己脚本名称和类名是

weixin_43797328的博客 3890

【超级入门】Unity如何实现画射线+射线检测+NavMeshAgent结合

射线检测是特别常见的应用,这里有非常简单的画射线和射线检测,以及结合导航寻路组件的使用,从基础入手,快来看看吧。

记录unity基础 5084

Unity 实现射线检测

unity 实现射线检测

weixin_44306106的博客 598

unity中射线检测

射线击中物体改变物体材质。物体放置鼠标点击的位置。

m0_66744030的博客 724

三相逆变器拓扑结构的分析及应用场景

三相逆变器是电力电子领域中广泛应用的一种设备,用于将直流电转换为交流电。不同的拓扑结构在性能、成本、复杂度和应用领域上存在差异。小编将在本文中将进一步拓展对三相逆变器拓扑结构的分析,并探讨其适用的应用场景。

道合顺的博客 2235

模拟电子技术课设-压控信号发生器

正弦波产生电路的目的就是使电路产生一定频率和幅度的正弦波,我们一般在放大电路中引入正反馈,并创造条件,使其产生稳定可靠的振荡。由于图2.3-1所示电路中存在RC电路和积分电路两个延迟环节,在实用电路中,将它们“合二为一”,即去掉方波发生电路中的RC回路,使积分运算电路即作为延迟环节,又作为方变三角波电路,滯回比较器和积分运算电路的输出互为另一个电路的输入。接着对各单元电路的工作原理进行了分析,由直流稳压电源电路提供所需电压,文氏振荡器产生正弦波,滞回比较器产生方波,滞回比较器与积分器连接产生三角波。

Sulfurone的博客 5324

Unity 的射线检测

射线检测的学习与应用

mddycp的博客 5287

深度学习(Deep Learning, DL)简介

深度学习(Deep Learning, DL)是机器学习的一个子领域,主要使用多层神经网络来处理复杂的数据和任务。深度学习通过模拟人脑的神经网络结构,能够自动提取特征并进行高效的模式识别和预测。

qq_28791753的博客 1万+

unity-射线检测

在Unity中,射线检测(Raycasting)是一种用于从特定点向特定方向投射一条射线并检测这条射线是否与任何对象(如碰撞体)相交的技术。射线检测在游戏开发中有很多用途,比如检测玩家的视线、实现点击选择、物理碰撞检测等。

m0_74462339的博客 619

Frida实战:如何逆向分析某电商App的doCommandNative函数(附完整Hook脚本)

本文详细介绍了如何使用Frida逆向分析电商App中的doCommandNative函数,涵盖动态注册识别、SO加固对抗及高级Hook脚本编写等实战技巧。通过完整Hook脚本示例,帮助安全研究人员深入理解JNICLibrary的关键函数逆向分析方法,提升移动应用安全研究能力。

weixin_29327977的博客 615

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2078

【unity入门学习日记:通过射线检测控制对象脚本的开关(准心指向物体开启高光)】

通过射线检测控制脚本开关

Bald_man_QAQ的博客 487

【漏洞复现】CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞,攻击者可利用此漏洞执行任意代码。

渗透之路,攻防之间皆学问 6709

unity诡异的问题---使用脚本动态生成的物体无法用射线检测到,但是进入攻击范围后又可以被检测到...

unity诡异的问题---使用脚本动态生成的物体无法用射线检测到,但是进入攻击范围后又可以被检测到 可以在右侧Inspector面板,将模型的刚体约束FreezeAll(全部选中),这样一来,就可以完全使用脚本改变物体transform,避免物体系统对模型产生影响,从而导致射线检测异常。 ...

yocichen 536

【软件系统架构】系列十一:面向对象技术—sysML

摘要: SysML(系统建模语言)是UML的扩展,专为复杂系统工程设计,支持硬件、软件、人员等跨领域建模。其核心包括9种图:4种结构图(如块定义图BDD、内部块图IBD)、4种行为图(如活动图AD、序列图SD)和需求图(REQ),覆盖需求、结构、行为及参数约束。相比UML(面向软件),SysML精简图表(9 vs 13),强化需求追踪与性能分析(如参数图PD),并支持MBSE(基于模型的系统工程)。需求关系(如满足、验证、派生)在需求图中明确关联设计实现,形成闭环管理。SysML是UML的子集与系统工程扩展

moton2017的博客 1908

铁路场景雷达点云目标识别与追踪系统

本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。

huanghm88的专栏 125

Unity射线检测实例

Unity射线检测实例 运行这个脚本,如果按下鼠标左键时,其所在位置产生的射线和物体相交,那么物体颜色发生改变 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Manager : MonoBehaviour { void Update() { ...

weixin_42405831的博客 921

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Unity 发射射线 检测销毁

Unity实现发射射线,检测到物体,物体销毁 void Update() { //当点击鼠标左键时发射一条射线 0是左键 1是右键 2是滚轮 if (Input.GetMouseButton(0)) { //生成射线 //从主相机上的某一点 发射一条射线 (鼠标位置的那个点) Ray ray = Camera.main.ScreenPointToRay(Input.mou

spring_dede的博客 3544

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

基于Pico开发中射线检测功能的实现

PIco开发中射线检测功能的实现

Unity_喆喆的博客 3664

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【Unity】在Scene窗口中发射射线

【Unity】在Scene窗口中发射射线 Handles 类中有很多用于在Scene中绘制形状的方法,HandleUtility 类中有很多处理Editor事件的方法,二者结合可以做出许多非常有用的编辑器扩展工具。例如,可以实现在Scene窗口中做射线检测。 在自定义脚本扩展中实现Scene射线 using UnityEngine; using UnityEditor; // 自定义脚本扩展中实现Scene射线 [CustomEditor(typeof(MyScript))] public class C

Arvin的博客 2417

Unity实现摄像机向屏幕中间发射射线射击物体

我们在玩具的 "启动" 阶段(Start 方法)计算了一下屏幕的 "中心位置",并把结果存放在 ScreenMidPos 变量里。RayShot 方法就像我们在玩游戏时按下的 "射击" 键,它会从 MianCamera(摄像头)出发,向屏幕中间发射一条 "射线"(Ray)。如果相撞,我们会检查这个物体是不是 "地形" 或者 "角色",如果不是,我们就会 "消灭"(Destroy)这个物体。这样,我们就可以清楚地看到这条射线,就像我们在玩游戏时看到的 "血条" 一样。前面的UI仅仅只是一个标识!

leoysq的博客 3647

Unity制作红色射线

1.在发射射线的位置创建一个空物体用于存储发射点的位置信息2、制作射线,为发射射线物体添加LineRenderer组件  制作Material材质并把其类型改为Particles/Addictive模式并为其加颜色把纹理放到LineRenderer的Material中,修改LineRenderer 的Width属性改成细线。3、写脚本发射射线public Transform rayPos;publ...

weixin_36504157的博客 3323

Unity3D制作红色射线

1、在发射射线的位置创建一个空物体用于存储发射点的位置信息。 2、制作射线,为发射射线物体添加LineRenderer组件 制作Material材质并把其类型改为Particles/Addictive模式并为其加颜色把纹理放到LineRenderer的Material中,修改LineRenderer 的Width属性改成细线。 3、写脚本发射射线 pub...

weixin_30752377的博客 738

在Unity中让主摄像机发射一条射线,判断射线在游戏场景中所碰撞的游戏物体名字和标签名称(亲测有效)

在Unity中让主摄像机发射一条射线,判断射线在游戏场景中所碰撞的游戏物体名字和标签名称(亲测有效) 在场景中新建一个Test脚本,然后打开脚本!并复制下面的代码! using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { ...

虚粒世界 5599

【NGUI】通过射线检测被遮挡的物体

// Update is called once per frame void Update () { Ray ray = UICamera.mainCamera.ScreenPointToRay (UICamera.mainCamera.WorldToScreenPoint(transform.position));// 向屏幕发射线 RaycastHit hit; Debug.

Zok93 1万+

利用lineRender画射线

using System.Collections; using System.Collections.Generic; using UnityEngine; public class makeRay : MonoBehaviour { private LineRenderer lr; // Use this for initialization void Start () { lr = GetCo...

LCHUIHUI的博客 1813
上一篇: Unity 如何进行光照烘焙
下一篇: Unity碰撞检测 触发检测(简易像素鸟)
zhong_0419
博客等级 码龄8年 30粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值