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老师!!望尽快解惑,麻烦了!
如果只是检测player是否在机器人的视野范围内的话,并不需要射线检测的,直接判断player的方位跟机器人视野前方的夹角,判断下是否小于55就知道是否在视野范围内了