2D sidescrolling game. Jumping problems through platforms and platform effector.
I'm trying to create a side scrolling game, so the character has to jump and not move sideways. The problem is that I cannot implement a jump (which should be evolved into a double jump in the future) because I don't know how to check the ground and how to apply the forces. I tryed to check the ground with a raycast but it works in 3D but not in 2D and I know I can check the ground when the velocity.y is zero but is a solution that can bring future problems. Now my question is, what is the simplest and most effective solution to check the ground and jump through the platforms (one way only, from bottom to top)? Should I use addForce or trasform? I'm stuck on this for a week now and it's driving me crazy, Thank you for all the answers.
This a code I copied from a youtube tutorial, it works in 3D but not in 2D. Is this the right way to do it? Note I'm using "platform effector" at the moment, tell me if I should get rid of it.
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
[System.Serializable]
public class MoveSettings
{
public float jumpVel = 25;
public float distToGrounded = 5f;
public LayerMask ground;
}
[System.Serializable]
public class PhysSettings
{
public float downAccel = 0.75f;
}
[System.Serializable]
public class InputSettings
{
public float inputDelay = 0.1f;
public string JUMP_AXIS = "Jump";
}
public MoveSettings moveSetting = new MoveSettings ();
public PhysSettings physSetting = new PhysSettings ();
public InputSettings inputSetting = new InputSettings ();
Vector2 velocity = Vector2.zero;
Rigidbody2D rBody;
float jumpInput;
bool Grounded ()
{
return Physics.Raycast (transform.position, Vector2.down, moveSetting.distToGrounded, moveSetting.ground);
}
void Start ()
{
if (GetComponent<Rigidbody2D> ()) {
rBody = GetComponent<Rigidbody2D> ();
} else {
Debug.LogError ("The character needs a rigidbody.");
}
jumpInput = 0;
}
void GetInput ()
{
jumpInput = Input.GetAxisRaw (inputSetting.JUMP_AXIS);
}
void Update ()
{
GetInput ();
}
void FixedUpdate ()
{
Jump ();
rBody.velocity = transform.TransformDirection (velocity);
}
void Jump ()
{
if (jumpInput > 0 && Grounded ()) {
velocity.y = moveSetting.jumpVel;
} else if (jumpInput == 0 && Grounded ()) {
velocity.y = 0;
} else {
velocity.y -= physSetting.downAccel;
}
}
}
Your answer
Follow this Question
Related Questions
Why 2d jump not working on touch? 0 Answers
I can't do jump in my 2D game 1 Answer
Calculate jumptime 0 Answers