unity射线检测

射线检测步骤

  1. 在代码中声明一个射线,可以是自定义的射线,也可以是鼠标位置或者其他什么的射线,自定义射线(通过定义射线的起始位置和发射方向):Ray mRay = new Ray(transform.position, transform.forward);或者鼠标射线Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  2. 声明碰撞结果的类RaycastHitRaycastHit _mHitInfo
  3. 给要碰撞的物体添加Tag
  4. 调用物理检测方法Physics.Raycast(Ray , out RaycastHit , float distance)
    具体代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooting : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
    }

    void Update()
    {
    }

    public void Shoot()
    {
        //位置,方向确定一个射线,设置射线不碰撞触发器
        Ray mRay = new Ray(GunBarrelEnd.transform.position, GunBarrelEnd.transform.forward);
        //或者是
        //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        
        //结果类
        RaycastHit hitInfo;
        if (Physics.Raycast(mRay, out hitInfo))
        {
            if (hitInfo.collider.tag == "Enemy")
            {
                //todo...
            }
        }
        Invoke("EndShoot",0.02f);
    }

    private void EndShoot()
    {
    	//todo...
    }

}

设置层级,对特定层级的进行检测

  1. 添加层级,并赋值
    在这里插入图片描述
  2. 得到层级的index``private EnemyIndex = LayerMask.GetMask(“Enemy”);
  3. 检测方法Physics.Raycast()中有很多重载,使用带有层级的那个即可
    在这里插入图片描述
  4. 其他的步骤和上面的一致

但是这样的射线检测,碰撞检测,触发检测都会发生反应,有的时候我们不想让trigger触发检测进行,因为碰撞检测一般用来物体不能重叠的效果,而出发检测用来进行AI的目标收集,自动攻击什么其他的效果,所以要进行射线发生触发检测那么,我们可以在untiy面板中进行设置,如下:

Edit->project setting->Physics->Queries Hit Triggers
在这里插入图片描述

发布了201 篇原创文章 · 获赞 210 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40666620/article/details/104693798