コード例 #1
0
ファイル: Platform.cs プロジェクト: pdxparrot/ssjAug2018
        private void FixedUpdate()
        {
            if (_currentWaypointIndex < 0 || _currentWaypointIndex >= _waypoints.Length)
            {
                _currentWaypointIndex = 0;
                return;
            }

            PlatformWaypoint targetWaypoint = _waypoints[_currentWaypointIndex];

            if ((targetWaypoint.transform.position - transform.position).sqrMagnitude < float.Epsilon)
            {
                _currentWaypointIndex = (_currentWaypointIndex + 1) % _waypoints.Length;
                targetWaypoint        = _waypoints[_currentWaypointIndex];
            }

            transform.LookAt(targetWaypoint.transform);

            float step = _speed * Time.fixedDeltaTime;

            transform.position = Vector3.MoveTowards(transform.position, targetWaypoint.transform.position, step);
        }
コード例 #2
0
 /// <summary>
 /// This function is called every fixed framerate frame, if the MonoBehaviour is enabled.
 /// </summary>
 void FixedUpdate()
 {
     if (crumbled)
     {
         if (currentRestoreTime > 0)
         {
             currentRestoreTime -= Time.fixedDeltaTime;
             if (currentRestoreTime <= 0)
             {
                 Restore();
             }
         }
     }
     else
     {
         if (currentCrumbleTime > 0)
         {
             currentCrumbleTime -= Time.fixedDeltaTime;
             if (currentCrumbleTime <= 0)
             {
                 crumbled = true;
                 animator.SetTrigger(ANIMATION_CRUMBLE);
                 myCollider.enabled = false;
                 if (restoreTime > 0)
                 {
                     currentRestoreTime = restoreTime;
                 }
             }
         }
         if (currentWaypoint)
         {
             if (currentWaitTime > 0)
             {
                 currentWaitTime -= Time.fixedDeltaTime;
                 return;
             }
             Vector2 distance = currentWaypoint.transform.position - transform.position;
             if (distance.magnitude <= decelerationDistance)
             {
                 if (distance.magnitude > 0)
                 {
                     speed -= Time.fixedDeltaTime * distance.normalized * maxSpeed * maxSpeed /
                              (2 * decelerationDistance);
                 }
                 else
                 {
                     speed = Vector2.zero;
                 }
             }
             else if (speed.magnitude < maxSpeed)
             {
                 if (accelerationDistance > 0)
                 {
                     speed += Time.fixedDeltaTime * distance.normalized * maxSpeed * maxSpeed /
                              (2 * accelerationDistance);
                 }
                 if (speed.magnitude > maxSpeed || accelerationDistance <= 0)
                 {
                     speed = distance.normalized * maxSpeed;
                 }
             }
             Vector3 newPos = Vector2.MoveTowards(transform.position, currentWaypoint.transform.position,
                                                  speed.magnitude * Time.fixedDeltaTime);
             Vector2 velocity = newPos - transform.position;
             if (speed.y > 0)
             {
                 MoveObjects(velocity);
                 transform.position = newPos;
             }
             else
             {
                 transform.position = newPos;
                 MoveObjects(velocity);
             }
             distance = currentWaypoint.transform.position - transform.position;
             if (distance.magnitude < 0.00001f)
             {
                 speed           = Vector2.zero;
                 currentWaypoint = currentWaypoint.nextWaipoint;
                 currentWaitTime = waitTime;
             }
         }
     }
 }