简单的二维鱼避免障碍

我目前正在统一一个简单的避障系统。 我有一个玩家和一群正在向着固定方向行进的艾鱼(向右)。 在游泳时,我希望艾鱼远离玩家,也远离阻碍。 我首先想到的是我应该使用boid植绒algorithm,但是由于我需要在移动设备上运行,所以我想将计算限制在尽可能低的水平,但这可能会过度。 鱼不需要互相避开,只需要朝着固定的方向前进。 其他说明:我不能使用统一的NavMesh系统,因为我使用2D物理,在运行时障碍物是随机的。

我的问题是,当邻近地区有多个障碍物和玩家时,我不知道如何有效地引导AI。 我有一些工作(下),但我手动操纵它,当它太靠近,但这将无法正常工作,当我有多个障碍,以避免在他们的邻近。 有人可以(哈哈)在正确的方向引导我如何解决这个问题吗?

谢谢

当前系统的例子

下面是我为Ai鱼做的课:

public class FishMoveTest : MonoBehaviour { public float Speed; Rigidbody2D rb; public float MinSpeed; public float MaxSpeed; public float DisableDistance; private float DistanceFromPlayer; public GameObject Player; Material NormalMat; public Material CollideMat; MeshRenderer MeshRend; public UnderwaterObstacle _UnderwaterObstacle; public float AvoidDistance; public float SteerSpeed; float DistanceFromObstacle; // Use this for initialization void Awake () { MeshRend = GetComponent<MeshRenderer> (); NormalMat = MeshRend.material; rb = GetComponent<Rigidbody2D> (); Speed = Random.Range (MinSpeed, MaxSpeed); } // Update is called once per frame void FixedUpdate () { DistanceFromObstacle = Vector3.Distance(transform.position, _UnderwaterObstacle.Obstacle.position); if (DistanceFromObstacle < AvoidDistance) { CastObstacleRay (); if (MeshRend.material != CollideMat) { MeshRend.material = CollideMat; } if (transform.position.y > _UnderwaterObstacle.Obstacle.position.y) { //Move Up-Right; rb.velocity = Vector3.Lerp(rb.velocity,new Vector3 (0.5f, 0.5f, 0) * Speed,SteerSpeed); } else { //Move Down rb.velocity = Vector3.Lerp(rb.velocity,new Vector3 (0, -1, 0) * Speed,SteerSpeed); } } else { rb.velocity = Vector3.Lerp(rb.velocity,new Vector3 (0.5f, -0.5f, 0) * Speed,SteerSpeed); if (MeshRend.material != NormalMat) { MeshRend.material = NormalMat; } } }