Moving an object in a curve along the z-axis
I'm currently working on following scene:
The idea is for the player to use the "A" and "D" keys to move by the X-axis. Then by using "W" and "S" jump up and down the stairs. I've roughly achieved this with my following code(PlayerController.cs):
public class PlayerController : MonoBehaviour {
public float playerSpeedX;
public float playerSpeedZ;
public float jumpSpeedUp;
public float jumpSpeedDown;
Rigidbody rigid;
public bool grounded;
public bool positionTier1;
public bool positionTier2;
public bool positionTier3;
// Use this for initialization
void Start () {
rigid = GetComponent<Rigidbody> ();
positionTier1 = true;
}
//---------------------------KEY INPUT---------------------------
// Update is called once per frame
void Update () {
//If listed keys are pressed, move left.x
if (Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.LeftArrow)) {
transform.position += Vector3.left * playerSpeedX * Time.deltaTime;
}
//If listed keys are pressed, move right.x
if (Input.GetKey (KeyCode.D) || Input.GetKey (KeyCode.RightArrow)) {
transform.position += Vector3.right * playerSpeedX * Time.deltaTime;
}
if(Input.GetKeyDown (KeyCode.W) || Input.GetKeyDown (KeyCode.UpArrow)) {
jumpUp ();
playerSpeedX = 0;
StartCoroutine (moveLevelTier1 ());
StartCoroutine (moveLevelTier2 ());
StartCoroutine(waitWhileJumping());
}
if (Input.GetKeyDown (KeyCode.S) || Input.GetKeyDown (KeyCode.DownArrow)) {
jumpDown ();
playerSpeedX = 0;
StartCoroutine (moveLevelTier3 ());
StartCoroutine (moveLevelTier4 ());
StartCoroutine (waitWhileJumping ());
}
}
//---------------------------CHECKING IF GROUNDED---------------------------
//If Player is on the ground, grounded = true
void OnCollisionStay (Collision collisionInfo) {
grounded = true;
}
//If Player is in the air (exitin the ground), grounded = false
void OnCollisionExit (Collision collisionInfo) {
grounded = false;
}
//---------------------------JUMP FUNCTIONS---------------------------
//Jump function
void jumpUp() {
if (grounded == true) {
rigid.velocity = Vector3.up * jumpSpeedUp;
}
}
void jumpDown() {
if (grounded == true) {
rigid.velocity = Vector3.up * jumpSpeedDown;
}
}
//---------------------------FREEZES X-POSITION---------------------------
//Waits to ensure player doesn't move mid-air
IEnumerator waitWhileJumping() {
yield return new WaitForSeconds(1);
playerSpeedX = 3;
}
//---------------------------CHANGING TIERS---------------------------
IEnumerator moveLevelTier1() {
if (grounded == true && positionTier1 == true) {
yield return new WaitForSeconds (0.5f);
transform.position += new Vector3 (0, 0, 1) * playerSpeedZ;
positionTier1 = false;
positionTier2 = true;
}
}
IEnumerator moveLevelTier2() {
if (grounded == true && positionTier2 == true) {
yield return new WaitForSeconds (0.5f);
transform.position += new Vector3 (0, 0, 1) * playerSpeedZ;
positionTier2 = false;
positionTier3 = true;
}
}
IEnumerator moveLevelTier3() {
if (grounded == true && positionTier3 == true) {
yield return new WaitForSeconds (0.5f);
transform.position += new Vector3 (0, 0, -1) * playerSpeedZ;
positionTier3 = false;
positionTier2 = true;
}
}
IEnumerator moveLevelTier4() {
if (grounded == true && positionTier2 == true) {
yield return new WaitForSeconds (0.5f);
transform.position += new Vector3 (0, 0, -1) * playerSpeedZ;
positionTier2 = false;
positionTier1 = true;
}
}
}
My only issue is that the player jumps, then instantly moves along the z-axis. What I actually want to achieve is that it happens in one smooth motion, from jump to platform. I've been messing around with some loops and different functions but without luck.
Your answer
![](https://koobas.hobune.stream/wayback/20220612070951im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
How do i create sub meshes? 1 Answer
How do i add lines to end Cubes?? 1 Answer
Hiding part of mesh 0 Answers
Make a 3D Object look like hes facing a point in an 2D space 0 Answers
How do i have game object in the middle of a Catmull spline? 0 Answers