virtual protected Vector3 MoveTowardsPlayer() { var radii = new List <float>() { conf.cohesionRadius, conf.alignmentPriority, conf.separationPriority, conf.avoidancePriority }; var maxRadius = radii.Max(); var neighboursShortList = controller.GetNeighbours(this, maxRadius); Vector3 finalVec = conf.cohesionPriority * Cohesion(neighboursShortList) + conf.alignmentPriority * Alignment(neighboursShortList) + conf.separationPriority * Separation(neighboursShortList); //conf.avoidancePriority * Avoidance(); if (HasLineOfSightOnTarget()) { //Attack var targetDirection = Vector3.Normalize(target.position - transform.position); finalVec += conf.pathfindPriority * targetDirection; } else { finalVec += conf.pathfindPriority * FollowSwarmLeader(); } return(finalVec); }