unity_射线检测(Raycast)

检测一个物体

using UnityEngine;

public class Example_01 : MonoBehaviour
{
    public float _maxDistance = 10;

    public LayerMask _layerMask;

    private void Update()
    {
        //1.射线 2.碰撞物体的信息 3.射线距离 4.指定的碰撞层
        //5.询问触发器交互(isTrigger 为 True 时忽略触发器交互,默认时无论 true 或者 false 都可以检测到)    
        if (Physics.Raycast(ray, out RaycastHit raycastHitInfo, _maxDistance, _layerMask,
                QueryTriggerInteraction.Ignore))
        {
            Debug.Log(raycastHitInfo.collider.gameObject.name);
            Debug.DrawLine(transform.position, raycastHitInfo.point, Color.red);
        }
        else
        {
            //Debug.DrawLine(ray.origin, ray.direction * 100, Color.green);
            Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow);
        }
    }
}

检测多个物体

        RaycastHit[] raycastHits;
        raycastHits = Physics.RaycastAll(ray, _maxDistance, _layerMask);
        Debug.DrawLine(transform.position, transform.forward * 100, Color.red);

        foreach (var hit in raycastHits)
        {
            hit.collider.gameObject.GetComponent<Renderer>().material.color = Color.black;
        }
参考:

【中文专题】Raycast射线检测在3D世界中的介绍(含基本概念,武器检测,对...

猜你喜欢

转载自blog.csdn.net/ashmoc/article/details/126536734