unity:unity 开发基础代码(三)射线检测

方法原型和参数说明:

public static bool Raycast(Vector3 origin(起点), Vector3 direction(终点), out RaycastHit hitInfo(返回的信息), float maxDistance(距离),int layerMask(层级),QueryTriggerInteraction queryTriggerInteraction(是否命中触发器));

  1.示例代码:

// 不限制距离 
    public Transform transform1;
    RaycastHit hit;
    void FixedUpdate()
        {

// 后面的参数没写是检测所有层级 和距离命中的状态        

if (Physics.Raycast(transform.position, transform1.transform.position, out hit))
            print("找到物体的距离是: " + hit.distance);

    }

如图所示:

  unity:unity 开发基础代码(三)射线检测_第1张图片
    2.限制距离在距离范围内检测到同层级返回物体为真,检测不到返回为假

  public Transform transform1;
    RaycastHit hit;
    void FixedUpdate()
        {

public LayerMask mask;

// 检测层级和和距离      

if (Physics.Raycast(transform.position, transform1.transform.position, out hit,200.0f,mask))
            print("找到物体的距离是: " + hit.distance);

    }

3.通过Ray,使用示例可以通过这函数找到鼠标位置,进行射击 发射等等 游戏操作

public static bool Raycast(Ray ray(射线的起点和方向), float maxDistance = Mathf.Infinity(距离), int layerMask = DefaultRaycastLayers(层级),QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal(是否命中触发器));

示例代码:

 void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, 100))
            print("什么鬼");
    }

输出结果:

unity:unity 开发基础代码(三)射线检测_第2张图片

4.Ray 的不同参数 

void Update()
    {
       
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray,out hit, 100))
            Debug.DrawLine(ray.origin, hit.point,Color.red);
    }

如下图:

unity:unity 开发基础代码(三)射线检测_第3张图片

以上根据官网示例,个人操作所得 ,如有雷同纯属巧合

你可能感兴趣的:(unity)