unity3d 射线碰撞与敌人视野检测

首先在Hierachy界面创建好一个capsule躯体和一个Sphere用做敌人角色视线检测,并且将Sphere作为capsule的子对象

 简易的敌人模型如上,接下来点击Sphere,将球体自带的碰撞体去除,同时添加胶囊碰撞体Capsule Collider,勾选is Trigger的同时将Direction设置为Z-Axis,这里我们希望检测的方向是视野朝向的方向即蓝轴z轴,点击Edit Collider 设置好检测范围,整体如下:

 接下来关键就是代码了,详解如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class enemyview : MonoBehaviour
{
    // Start is called before the first frame update
    public Transform player;//检测对象
    public bool isinrange;//判断是否在检测范围

    private void OnTriggerEnter(Collider other)//用于检测目标进入触发区域
    {
        if(other.transform==player)
        {
            isinrange = true;
        }
    }
    private void OnTriggerExit(Collider other)//在实际游戏过程中,进入该触发区域可能有其他物体,所以要检测目标角色的离开
    {
        if(other.transform==player)
        {
            isinrange=false;
        }
    }
    // Update is called once per frame
    void Update()
    {
        if(isinrange)
        {
            Vector3 direction=player.position - transform.position;//vector3用一个向量记录好射线检测的方向,根据数学知识(A到B的向量等于B的坐标-A的坐标)这里类似
            Ray ray=new Ray(transform.position, direction);//这里的new是要不断更新方向,因为玩家的位置时刻都会改变,有了方向接下来就是射线,射线需要的就是一个原点和一个方向,括号内的transform.position指的就是用于检测的物体自身(即本项目中角色身上的红球);
            RaycastHit hit;//有了射线,接下来就可以进行投射
            if(Physics.Raycast(ray, out hit))//这路的out可以理解为返回投射目标的对象信息
            {
                if(hit.collider.transform==player)//如果投射的对象是玩家则“游戏结束”
                {
                    Debug.Log("Gameover!");
                }
            }
        }
    }
}

将代码添加给红球Sphere,同时将玩家角色拖放进Inspector中的脚本:

                            

点击运行,当你控制游戏角色走过敌人面前并查看Console:

小结关于射线检测,首先创建三位向量确定好方向,有了方向就可创建射线,接下来再是射线投射

利用Physics.Raycast(ray, out hit)收集投射目标的信息。射线检测记住这一模板就运筹帷幄啦!

当然将这一模板的内容与主页当中介绍的敌人巡逻功能结合起来,一个完整的敌人巡逻+目标检测就完成了!

http://t.csdn.cn/iZmbA

猜你喜欢

转载自blog.csdn.net/m0_64652083/article/details/129095147