Unity游戏开发笔记之功能实现

版权声明:原创笔记 ----黑暗灵魂 https://blog.csdn.net/qq_38843118/article/details/84680314

1、获取距离主角最近的一个怪物

方法一:球形射线检测,Physics.OverlapSphere

用球形射线检测主角周围方圆X米的怪物,如果检测到怪物,即可返回此怪物,如果没有检测到怪物,将检测范围(即半径)扩大,直到检测到怪物为止。

    public Transform OnGetEnemyNear()
    {
        //正在搜索的半径
        int radius = 1;
        //一步一步扩大搜索半径,最大扩大到100
        while (radius < 100)
        {
            //球形射线检测,得到半径radius米范围内所有的物件
            Collider[] cols = Physics.OverlapSphere(transform.position, radius);
            //判断检测到的物件中有没有Enemy
            if (cols.Length > 0)
                for (int i = 0; i < cols.Length; i++)
                    if (cols[i].tag.Equals("Enemy"))
                        return cols[i].transform;
            //没有检测到Enemy,将检测半径扩大2米
            radius += 2;
        }
        return null;
    }

方法二:比较所有怪物与主角之间的距离

获取所有怪物,计算每一个怪物与主角之间的距离,进行比较,选择一个与主角距离最短的怪物。

    public Transform OnGetEnemyNear()
    {
        //获取所有敌人
        GameObject[] enemy = GameObject.FindGameObjectsWithTag("Enemy");
        float distance_min = 10000;    //主角与怪物的最近距离
        float distance = 0;            //当前怪物与主角的距离
        int id = 0;                    //与主角最近的怪物的编号
        //遍历所有敌人,计算距离并比较
        for (int i = 0; i < enemy.Length; i++)
        {
            if (enemy[i].activeSelf == true)
            {
                distance = Vector3.Distance(transform.position, enemy[i].transform.position);
                if (distance < distance_min)
                {
                    //找到一个更近的
                    distance_min = distance;
                    id = i;
                }
            }
        }
        return enemy[id].transform;
    }

猜你喜欢

转载自blog.csdn.net/qq_38843118/article/details/84680314