/// <summary> /// Insert a trail into this trail renderer. /// </summary> /// <param name="from">The start position of the trail.</param> /// <param name="to">The end position of the trail.</param> /// <param name="distanceBetweenPoints">Distance between each point on the trail</param> public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints) { float distanceBetween = Vector3.Distance(from, to); Vector3 dirVector = to - from; dirVector = dirVector.normalized; float currentLength = 0; CircularBuffer <PCTrailPoint> newLine = new CircularBuffer <PCTrailPoint>(GetMaxNumberOfPoints()); int pointNumber = 0; while (currentLength < distanceBetween) { PCTrailPoint newPoint = PCTrailPoint.New(); newPoint.PointNumber = pointNumber; newPoint.Position = from + dirVector * currentLength; newLine.Add(newPoint); InitialiseNewPoint(newPoint); pointNumber++; if (distanceBetweenPoints <= 0) { break; } else { currentLength += distanceBetweenPoints; } } PCTrailPoint lastPoint = PCTrailPoint.New(); lastPoint.PointNumber = pointNumber; lastPoint.Position = to; newLine.Add(lastPoint); InitialiseNewPoint(lastPoint); PCTrail newTrail = new PCTrail(GetMaxNumberOfPoints()); newTrail.Points = newLine; _fadingTrails.Add(newTrail); }
protected override void Update() { if (_emit) { _distanceMoved += Vector3.Distance(_t.position, _lastPosition); if (_distanceMoved != 0 && _distanceMoved >= MinVertexDistance) { AddPoint(PCTrailPoint.New(), _t.position); _distanceMoved = 0; } _lastPosition = _t.position; } base.Update(); }
/* * void OnDrawGizmos() * { * if (Application.isPlaying && _controlPoints != null) * { * for (int i = 0; i < _controlPoints.Count; i++) * { * Gizmos.color = Color.red; * Gizmos.DrawSphere(_controlPoints[i].p, 0.01f); * * if (i < _controlPoints.Count - 1) * { * Vector3 Handle1, Handle2; * float distanceBetween = Vector3.Distance(_controlPoints[i].p, _controlPoints[i + 1].p) / 2; * if (i == 0) * { * Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i].p).normalized * distanceBetween; * } * else * { * Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i - 1].p).normalized * distanceBetween; * } * * int nextI = i + 1; * * if (nextI == _controlPoints.Count - 1) * { * Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI].p).normalized * distanceBetween; * } * else * { * Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI + 1].p).normalized * distanceBetween; * } * * Gizmos.color = Color.green; * Gizmos.DrawSphere(Handle1, 0.01f); * Gizmos.DrawLine(_controlPoints[i].p, Handle1); * Gizmos.color = Color.blue; * Gizmos.DrawSphere(Handle2, 0.01f); * Gizmos.DrawLine(_controlPoints[nextI].p, Handle2); * * * Vector3 current = _controlPoints[i].p; * * for (int pointBetween = 0; pointBetween < PointsBetweenControlPoints; pointBetween++) * { * Vector3 next = GetPointAlongCurve(_controlPoints[i].p, Handle1, _controlPoints[i + 1].p, Handle2, ((pointBetween + 1) / ((float)PointsBetweenControlPoints + 1f)), 0.3f); * * Gizmos.DrawLine(current, next); * * Gizmos.color = Color.yellow; * Gizmos.DrawSphere(next, 0.01f); * * current = next; * } * * Gizmos.color = Color.blue; * Gizmos.DrawLine(current, _controlPoints[i + 1].p); * * } * } * } * } */ protected override void OnStartEmit() { _lastPosition = _t.position; _distanceMoved = 0; _controlPoints = new CircularBuffer <ControlPoint>(MaxControlPoints); _controlPoints.Add(new ControlPoint { p = _lastPosition }); if (TrailData.UseForwardOverride) { _controlPoints[0].forward = TrailData.ForwardOverrideRelative ? _t.TransformDirection(TrailData.ForwardOverride.normalized) : TrailData.ForwardOverride.normalized; } AddPoint(PCTrailPoint.New(), _lastPosition); AddControlPoint(_lastPosition); }
private void AddControlPoint(Vector3 position) { for (int i = 0; i < PointsBetweenControlPoints; i++) { AddPoint(PCTrailPoint.New(), position); } AddPoint(PCTrailPoint.New(), position); ControlPoint newCP = new ControlPoint { p = position }; if (TrailData.UseForwardOverride) { newCP.forward = TrailData.ForwardOverrideRelative ? _t.TransformDirection(TrailData.ForwardOverride.normalized) : TrailData.ForwardOverride.normalized; } _controlPoints.Add(newCP); }