Exemple #1
0
 void onJumping()
 {
     float jumpProgress = (Time.time - jumpStartTime) / maxJumpTime;
     if (jumpProgress > 1f) {
         lastIntersectedFloor = landingSiteGameObject.GetComponent<LandingSite> ().Floor;
         IsJumping = false;
         floatingEffect.enableEmission = false;
         speed = maxSpeed;
         float nextProgress = (float)lastIntersectedFloor.Order + lastIntersectedFloor.GetPercentage (transform.position);
         progress = nextProgress;
     } else {
         float localX = Mathf.Cos (Mathf.PI * jumpProgress);
         float localY = Mathf.Sin (Mathf.PI * jumpProgress);
         Vector3 yAxis = lastIntersectedFloor.GetTangentDir (jumpStartPosition).normalized;
         Vector3 xAxis = -(landingSiteGameObject.transform.position - jumpStartPosition).normalized;
         Vector3 zAxis = Vector3.Cross (yAxis, xAxis);
         float radius = (landingSiteGameObject.transform.position - jumpStartPosition).magnitude / 2f;
         Vector3 center = (landingSiteGameObject.transform.position + jumpStartPosition) / 2f;
         Vector3 nextPosition = center + xAxis * localX * radius + yAxis * localY * radius;
         Vector3 up = (nextPosition - center).normalized;
         Vector3 forward = Vector3.Cross (up, zAxis);
         Quaternion nextRotation = Quaternion.LookRotation (forward, up);
         transform.rotation = nextRotation;
         transform.position = nextPosition;
     }
 }