unity-射线检测(大佬代码的注释)及部分代码函数解释的具体链接

	private bool Look(StateController controller)
    {
        var defaultStats = controller.defaultStats;

        //一条向前的射线
        if (LookAround(controller, Quaternion.identity, Color.green))
            return true;

        //多一个精确度就多两条对称的射线,每条射线夹角是总角度除与精度
        float subAngle = (defaultStats.lookAngle / 2) / defaultStats.lookAccurate;
        for (int i = 0; i < defaultStats.lookAccurate; i++)
        {
            if (LookAround(controller, Quaternion.Euler(0, -1 * subAngle * (i + 1), 0), Color.green) 
                || LookAround(controller, Quaternion.Euler(0, subAngle * (i + 1), 0), Color.green))
                return true;
        }

        return false;
    }

    //射出射线检测是否有Player
    static public bool LookAround(StateController controller, Quaternion eulerAnger,Color DebugColor)
    {
        Debug.DrawRay(controller.eyes.position, eulerAnger * controller.eyes.forward.normalized * controller.defaultStats.lookRange, DebugColor);

        RaycastHit hit;
        if (Physics.Raycast(controller.eyes.position, eulerAnger * controller.eyes.forward, out hit, controller.defaultStats.lookRange) && hit.collider.CompareTag("Player"))//forward人物正前方(z轴方向)   controller.defaultStats.lookRange寻找范围 out hit为RaycastHit固定用法
        {
            controller.chaseTarget = hit.transform;
            return true;
        }
        return false;
    }

    public float accuracy = 1f;                     //检测精度

    private bool Look(StateController controller)
    {
        float subAngle = angle / accuracy;          //每条射线需要检测的角度范围,angle角度
        for (int i = 0; i < accuracy; i++)
            if (LookAround(controller, Quaternion.Euler(0, -angle / 2 + i * subAngle + Mathf.Repeat(rotatePerSecond * Time.time, subAngle), 0), distance, debugColor)) // Mathf.Repeat 求余数的函数 rotatePerSecond每秒旋转角度 Quaternion.Euler返回一个旋转,它围绕 z 轴旋转 z 度、围绕 x 轴旋转 x 度、围绕 y 轴旋转 y 度(按该顺序应用)。(官方api文档解释)
                return true;
        return false;
    }

射线检测实现方法:源码链接:https://blog.csdn.net/l773575310/article/details/73251093
forward链接为:https://blog.csdn.net/kaluluosi111/article/details/17206655
RaycastHit链接为:https://blog.csdn.net/qq_30454411/article/details/79140318

posted @ 2022-02-07 23:39  云鲸啊  阅读(481)  评论(0)    收藏  举报