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);
                    }
                }
            }

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

  • 相关阅读:
    关于机器学习系统的方向
    图像去雾
    中国九十年代摇滚
    matlab 将数字矩阵转换成图像
    vue-router路由守卫ie浏览器下报错问题解决
    vue:index.html、main.js、app.vue
    vue关于for循环
    element-ui表单校验
    记录vue组件引入components两次的后果
    vue组件通信
  • 原文地址:https://www.cnblogs.com/Dean27/p/8602894.html
Copyright © 2011-2022 走看看