【超级入门】Unity如何实现画射线+射线检测+NavMeshAgent结合

       “射线检测是在3D数字世界里选择某个特定物体常用的一种技术,如在3D、VR游戏中检测子弹命中敌人情况或者从地上捡起一支枪,这都要用到射线检测射线检测是在3D数字空间中选择虚拟物体的最基本方法。 ”

一:画射线

效果:

我们先创建一个物体,挂脚本<RayTest>,代码如下:

public class RayTest : MonoBehaviour
{
    Ray ray;  //声明射线
    void Start()
    {
        ray = new Ray();
        ray.origin = transform.position;   //射线起点
        ray.direction = transform.forward; //射线方向
    }

    // Update is called once per frame
    void Update()
    {
        Debug.DrawRay(ray.origin, ray.direction * 3, Color.green);
       //三个参数:起点,方向(*3代表三个单位距离),颜色
    }
}

二:射线检测

1)检测物体

是否可以检测到物体呢?我们可以打印输出看一看。

        if(Physics.Raycast(ray))
        {
            print("检测到了游戏对象");
        }

结果:只要有物体被此射线击中,就会打印这句话。

 

2)相机(屏幕)发射射线

我们把这个圆球,命名为Target,想要实现鼠标左键单击这个球,会生成黄色的弹壳,效果如下:

代码如下:

 //如果单击鼠标左键
        if(Input.GetMouseButtonDown(0))
        {
            //在鼠标点击处发射射线
            Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
            //如有有物体被检测到
            if(Physics.Raycast(camRay,out RaycastHit hits))
            {
                //如果被击中的物体名字为Target
                if(hits.transform.name == "Target")
                {
                    //产生一个弹壳
                    GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Capsule);
                    bullet.transform.localScale = Vector3.one * 0.5f;
                    bullet.GetComponent<MeshRenderer>().material.color = Color.yellow;
                    //在鼠标点击处生成弹壳
                    bullet.transform.position = hits.point;
                }
            }
        }

 3)点击地面实现物体寻路(导航)

        这里的前提是player需要有NavMeshAgent组件,地面Plane需要添加tag=“Ground”,地面还需要烘焙哦!

猜你喜欢

转载自blog.csdn.net/m0_74022070/article/details/129875005