コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: SmoothTrail.cs プロジェクト: pikaqiufk/Client
        /*
         * 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);
        }
コード例 #4
0
ファイル: SmoothTrail.cs プロジェクト: pikaqiufk/Client
        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);
        }