Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2208.00元
Unity2017.2 射线问题
LiHauio发起了问答2018-05-08
6
回复
617
浏览
public void OnTriggerStay(Collider other)
    {
        //视觉 start
        if (other.tag == Tags.player)
        {
            Vector3 forward = transform.forward;//机器人前方直线
            Vector3 playerDir = other.transform.position - transform.position;//主角位置
            float temp = Vector3.Angle(forward, playerDir);//返回机器人前方到主角位置之间的夹角度数
            RaycastHit hit;
            Ray ray = new Ray(transform.position + Vector3.up, transform.forward);
            //bool res = Physics.Raycast(transform.position + Vector3.up, other.transform.position, out hit);
            bool res = Physics.Raycast(ray,out hit);
            //小于视角的一半,即看到主角,需要触发警报、记录主角触发警报时的位置、并且射线没有碰撞到障碍物
            Debug.DrawLine(ray.origin, hit.point, Color.red);
            if (temp < fieldOfView * 0.5f && hit.collider.tag == Tags.player)//***问题出现在这个判断里**
            {
                playerInSight = true;//看到主角
                alertPosition = other.transform.position;//记录位置
                GameController._instance.SeePlayer(other.transform);//发出警报
            }
            else
            {
                playerInSight = false;
            }
    }

老师你好,我正在使用Unity2017版本学习您的Stealth秘密行动项目

出现的问题是:机器人发射射线检测视野内是否出现主角时的视角不能满足,具体代码是这样的 。

视频里教到的是机器人的视角110° 而射线仅仅是向前方发射 假如进入视角 而射线并没有碰撞到主角导致机器人无法看到主角导致无法完成追捕。

我自己想到的办法

1、是使用3条射线完成机器人视角的检测,但是尝试过后我技术有限无法完成

2、加粗射线,无法完成

3、只要主角进入Tigger范围内,直接发射射线至主角位置,这样可以保证没有障碍物的情况下而主角出现在视角内时满足并且条件进入if从而发现主角,但是我英语不太好,只能上网查找博客,百度,知乎等寻找答案是否可以完成我需要的代码案例等,最后无法获取所需信息导致无法完成,特来请教Siki老师!!望尽快解惑,麻烦了!

 

所有回复
  • siki 2018-05-09

    如果只是检测player是否在机器人的视野范围内的话,并不需要射线检测的,直接判断player的方位跟机器人视野前方的夹角,判断下是否小于55就知道是否在视野范围内了

    • LiHauio 2018-05-09

      原本是这样写的,但是中间有障碍物也会看得到Player,就像透视眼一样,所以才会加上射线,加了以后就有后面的那些问题了。

      (0) 回复
    • siki 2018-05-10

      回复 @ LiHauio: 先检测是否在范围内,使用我说的方法,再利用射线检测player跟机器人之间是否有别的障碍物

      (0) 回复
    • LiHauio 2018-05-10

      回复 @ siki: 嗯嗯,但是我不会怎么使用射线检测Player跟机器人之间是否有障碍物,我看过Raycast的参数,好像只有发射起始点,发射方向,没有发射目标点,单纯的发射方向的话 机器人转向时就会改变 我还不会怎么弄 头疼啊老师

      (0) 回复
    • LiHauio 2018-05-11

      回复 @ siki: 视频上教学是4.6的unity版本,我的是2017版本,没想到一样的代码可以出现4.6版本不存在的bug出现在2017版本,看来新版本也不是比一定老版本好啊

      (0) 回复
    • siki 2018-05-12

      回复 @ LiHauio: 可以使用player作为起点,方向你也可以计算得到,在射线检测的时候,添加一个距离,只发射player到机器人之间距离的射线,这个检测是player在视野内的时候就每帧检测的,所以机器人转向了也没关系

      (0) 回复
    还有0条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!