zoukankan      html  css  js  c++  java
  • Unity中关于射线的运用——第01节 线段射线

      前沿:在Unity的实际开发过程中,我们将有可能会用到射线这一技术,那么这篇章节,我们将总结一下Unity实际开发过程中会遇到的几种射线,以及如何运用。

    一、射线的种类以及运用的环境:

        1.线段。用途:可以拾取包裹。

        2.球形。用途:可以寻找附近的怪物,检测碰撞。

    二、如何发射这两种射线:

        1.线段射线:

          如下图所示,当我们的鼠标右键点击球形并且抬起时,将会打印出我们点击了哪个球形。

        

        2.如何编写这段代码:

    void Update
    { 
         if (Input.GetMouseButtonUp(1))
            {
                Ray ray = m_RoleCamera.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
    
                //此方法只能检测到一个碰撞信息
                //1.射线 射线信息 范围 层  
                if (Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << LayerMask.NameToLayer("Item")))
                {
                    Debug.Log("找到了" + hit.collider.gameObject.name);
                }
               
            }
    }

        

        3.运行结果如下:

        4.此时若是我们的球形的摆放位置如下图:

        也就是,Sphere00和Sphere01会有相互重合的部分。而此时我们运行代码就会发现,不管我们如何点击,时候只能获取到一个球形的碰撞信息。这个时候我们就需要修改一下脚本了。

        5.修改脚本,获取重叠的对象的碰撞信息:

    if (Input.GetMouseButtonUp(1))
            {
                Ray ray = m_RoleCamera.ScreenPointToRay(Input.mousePosition);//此方法能检测到多个碰撞信息
                RaycastHit[] hitAll = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Item"));
                if (hitAll.Length > 0)
                {
                    for (int i = 0; i < hitAll.Length; ++i)
                    {
                        Debug.Log("找到了" + hitAll[i].collider.gameObject.name);
                    }
                }
            }

        这个时候我们点击重叠的物体的重叠部分,会得到下面的结果:

  • 相关阅读:
    数据库常用术语
    灾备模式的基本体系架构
    linux下的c++开发
    视图矩阵的推导-opengl应用
    抓包实例
    以软件推动工业进步 -嵌入式学习网站
    web 前端 转盘界面
    web 汇率
    xml
    高性能网站架构设计之缓存篇(4)- 主从复制
  • 原文地址:https://www.cnblogs.com/Dean27/p/8602894.html
Copyright © 2011-2022 走看看