Unity小问题:怎么以地上的一个点为原点做范围检测?

先用射线检测获取地上的一个点,再做范围检测。用到2个方法:

Physics.RaycastAll()  // 穿透射线检测
Physics.OverlapSphere()  // 球形范围检测

测试场景包含一个地面"Plane"和多个立方体:
在这里插入图片描述
快速阅读代码学习射线检测和范围检测:

using UnityEngine;

public class TestRangeSearch : MonoBehaviour
{
    private void Update()
    {
        // 射线检测
        if (Input.GetMouseButtonDown(0))
        {
            // 只检测到1个物体的射线检测
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo, Mathf.Infinity, 1 << LayerMask.NameToLayer("Default")))
            {
                Debug.Log("射线检测:" + hitInfo.transform.name);
            }

            // 穿透射线检测,检测到射线所触碰到的所有物体
            RaycastHit[] hitInfoArray = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Default"));
            if (hitInfoArray != null)
            {
                foreach (var item in hitInfoArray)
                {
                    Debug.Log("射线检测(穿透):" + item.transform.name);
                }
            }
        }

        // 范围检测(穿透射到地面,取地面的点做范围检测)
        if (Input.GetMouseButtonDown(1))
        {
            // 获得射线与地面相交的点
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit[] hitInfoArray = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Default"));
            RaycastHit hitInfo = new RaycastHit();
            foreach (var item in hitInfoArray)
            {
                if (item.transform.name == "Plane")
                {
                    hitInfo = item;
                    break;
                }
            }
            if (hitInfo.transform == null) { return; }

            // 球形范围检测,获取3米内属于Default层的所有物体
            Collider[] colliderArray = Physics.OverlapSphere(hitInfo.point, 3f, 1 << LayerMask.NameToLayer("Default"));
            foreach (var item in colliderArray)
            {
                Debug.Log("范围检测:" + item.name);
            }

        }
    }
}

吐槽一下CSDN的C#代码片不好看 ┑( ̄Д  ̄)┍

发布了3 篇原创文章 · 获赞 0 · 访问量 48

猜你喜欢

转载自blog.csdn.net/weixin_36335685/article/details/104411977