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); }