private void Update()
 {
     if (_isFiring)
     {
         Vector3 currentPosition = transform.position;
         Vector3 direction       = currentPosition - _lastPosition;
         float   sqr             = direction.sqrMagnitude;
         Vector3 lastPosition    = _lastPosition;
         if (sqr >= interval * interval)
         {
             int times = (int)(Mathf.Sqrt(sqr) / interval);
             for (int i = 0; i < times; i++)
             {
                 TrailObjectController trailObjectController = GetTrailObject().Fire(this, fadeOutTime, _material);
                 Vector3 position = lastPosition + direction.normalized * interval * i;
                 _lastPosition = position;
                 trailObjectController.transform.SetPositionAndRotation(position, transform.rotation);
                 _busyTrailObjects.Add(trailObjectController);
             }
         }
     }
 }
 public void Recycle(TrailObjectController trailObjectController)
 {
     _busyTrailObjects.Remove(trailObjectController);
     _idleTrailObjects.Enqueue(trailObjectController);
 }