//最后检测到的没有障碍物的位置
Vector3 strkeFlyPos;
//向量每次的旋转角度
public float rotationAngle = 180;
//方向向量 ,表示x轴的正方向
Vector3 dirTarget = new Vector3(5, 0, 0);
//向量的长度
float _v3Lenght = 5;
//目标位置
Vector3 _target;
/// <summary>
/// 找到以自身为原点地图上没有障碍物的点
/// </summary>
/// <param name="_angle"></param>
public void StrkeFly(float _angle)
{
for (int i = 0; i < 360 / _angle; i++)
{
//暂时记录找到的当前点的位置 //让自身加上半径(这个半径就是一个左侧为5的方向向量),让这个向量旋转,得到自身周围一个圆形的点
Vector3 tempPos = transform.position + Quaternion.AngleAxis(_angle * i, transform.up) * dirTarget.normalized * _v3Lenght;
//从摄像机发射一条射线检测这个点位置是否是障碍物
Ray ray = new Ray(Camera.main.transform.position, tempPos - Camera.main.transform.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
//如果不是就让敌人被击飞到这个点
if (hit.transform.tag == "ground")
{
_target = hit.point;
//找到目标位置后调用飞行的方法
StartCoroutine("FlyTaget");
return;
}
}
}
//当找完一周之后,没有找到,那么缩小向量的旋转角度,并调用自身
if (_angle > 1)
{
StrkeFly(_angle / 2);
return;
}
//当角度小于1的时候还没有找到,那么就缩小向量的长度继续寻找
if (_angle < 1 && _v3Lenght > 1)
{
_v3Lenght -= 1;
StrkeFly(_angle);
return;
}
}