public void Init(Transform target, EnemyMovementSetting settings) { _target = target; switch (settings.movementType) { case EnemyMovementType.GROUND: NavMeshAgent agent = gameObject.AddComponent <NavMeshAgent>(); _movementBehaviour = new NavMeshMovement(agent, settings.speed, settings.stoppingDistance); break; case EnemyMovementType.FLYING: Pursuer pursuer = gameObject.AddComponent <Pursuer>(); pursuer.SetConstraints(settings.xMin, settings.xMax, settings.yMin, settings.yMax, settings.zMin, settings.zMax); pursuer.SetPathfindingParameters(settings.selectedPFAlg, settings.pathfindingLevel, settings.inEditorPathfindingTraverce, settings.heuristicFactor, settings.trajectoryOptimization, settings.trajectorySmoothing); pursuer.SetMovementSettings(settings.speed, settings.moveVectorOrientation, settings.turnSpeed); _movementBehaviour = new FlyingMovement(pursuer, settings.lesion, settings.updateOffset); break; default: throw new ArgumentOutOfRangeException(); } }