图示:
实现:
///<summary>
///躲避障碍物
///</summary>
public class AvoidBarrierSteering : Steering
{
//探头-射线
//探头长度
public float probeLenght = 15;
//障碍物标记
public string obstacleTag = "Obstacle";
//最小推力
public float minPushForce = 30;
public Transform probePos;
private RaycastHit hit;
public override Vector3 ComputerFinalForce()
{
//向正前方发出指定长度的射线
if (Physics.Raycast(probePos.position, probePos.forward, out hit, probeLenght) && hit.collider.tag == obstacleTag)
{
//障碍物想碰撞点产生一个推力
var force = hit.point - hit.collider.transform.position;
//如果推力太小,则放大
if (force.magnitude < minPushForce)
force = force.normalized * minPushForce;
//返回推力
return force;
}
return Vector3.zero;
}
}