2016-12-02 80 views
0

我的代碼允許玩家對象圍繞圓周移動,然後「跳」到該圓的中心。在lerp跳轉時水平移動玩家Unity C#

我想要做的就是讓玩家在跳躍的同時繼續他們的繞圈運動,這樣玩家可以在跳躍時改變他們的位置。

這是我到目前爲止的完整代碼。

using UnityEngine; 
    using System.Collections; 

    public class Movement : MonoBehaviour 
{ 
//editable property if made public 
public float playerSpeed = 20f;//This is how fast the player moves 
float playerAngle = 0; //This is the players movement variable 
float radius = 4f; //This is the radius of how big the circle is (Circumference track 2piRadius 
float startTime; //This is the time the game started 
float gameTime; //This will be player points BASE THIS OFF OF HOW LONG THE GAMES RUNNING 
float playerRadius = .5f; //CHANGE TO THE PLAYER OBJECT VARIABLE, is how offset the player will be from the lvlradius. 
private bool jumping = false; //This effects movement during the game 
private Vector3 playerPosition; //This is the playerPosition in the game 
void Start() 
{ 
    //Called at the start of the game 
} 

void Update() 
{ 
    if (jumping) 
    { 
     return; 
    } 
    else if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow)) 
    { 
     circularMove(); 
    } 
    else if (Input.GetKeyDown(KeyCode.Space)) 
    { 
     StartCoroutine(jumpPlayer()); 
    } 
} 

void FixedUpdate() 
{ 
    //Called before performing physics calculations 
} 

void circularMove() 
{ 
    //player variables 

    //The angle the player is at is equal to the speed of the player divided by radius times time in the game and the addition of the left right keys 
    playerAngle += Input.GetAxis("Horizontal") * Time.deltaTime * (playerSpeed/radius); 
    //This is the movement on the x axis 
    float x = Mathf.Cos(playerAngle) * (radius - playerRadius); 
    //this is the movement on the y axis 
    float y = Mathf.Sin(playerAngle) * (radius - playerRadius); 
    //the player does not move forward at this time THIS WILL BE HOW TO MOVE THE PLAYER 
    float z = 0; 
    //move the player in the direction that they clicked but add the original coordinates to the players location 
    transform.position = new Vector3(x, y, z); 
    //Move the player; 
    playerPosition = transform.position; 
} 

private IEnumerator jumpPlayer() 
{ 
    Vector3 playerEndPos = new Vector3(0f, 0f, 0f); 
    Vector3 playerStartPos = playerPosition; 
    float i = 0.0f; 
    float rate = .1f/Time.deltaTime; 
    jumping = true; 
    while (i< 1.0) 
    { 
     i += Time.deltaTime * rate; 
     transform.position = Vector3.Lerp(playerStartPos, playerEndPos, i); 
     yield return null; 
    } 
    transform.position = playerEndPos; 
    i = 0.0f; 
    while (i < 1.0) 
    { 
     i += Time.deltaTime * rate; 
     transform.position = Vector3.Lerp(playerEndPos, playerStartPos, i); 
     yield return null; 
    } 
    transform.position = playerStartPos; 
    jumping = false; 
    yield break; 
} 

}

回答

2

隨着當前Update你的想法永遠是可能的,因爲如果用戶是跳躍的,你忽略了左,右按鍵的輸入。

通過將if(jumping)轉換爲實際的跳轉語句,您可能可以繞過此操作。

void Update() 
{ 
    if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow)) 
    { 
     circularMove(); 
    } 
    else if (Input.GetKeyDown(KeyCode.Space)) 
    { 
     if (!jumping) 
      StartCoroutine(jumpPlayer()); 
    } 
}