- Home /
2d character doesn't jump or fall when I change direction
When my 2d character is moving to the right it can jump to or fall from a platform but when it moves to the left it can't jump or fall from a platform.
Could you post your code to let us see where the problem maybe could be?
With just so little information, it is hard to say whats wrong.
Yes, we need your code in order to help you. I'm almost certain that it's not Unitys physics engine that is causing this behaviour so it has to be something in your script. Another thing you might wan't to do is copy the code that handles movement to the right and just change it to move the player to the left ins$$anonymous$$d. If you wrote something wrong in the left part this might fix it! Otherwise, just add some code so that we can take a look!
Sorry for the late reply , here is the code I'm using . using System.Collections; using System.Collections.Generic; using UnityEngine;
public class player : $$anonymous$$onoBehaviour { private Rigidbody2D myRigidbody;
private Animator myAnimator;
Vector2 moveForward;
bool canGoForward = true;
bool canGoBack;
private bool facingRight;
[SerializeField]
private Transform[] groundPoints;
[SerializeField]
private float groundRadius;
[SerializeField]
private Layer$$anonymous$$ask whatIsGround;
private bool isGrounded;
private bool jump;
[SerializeField]
private float jumpForce;
// Use this for initialization
void Start()
{
facingRight = true;
myRigidbody = GetComponent<Rigidbody2D>();
myAnimator = GetComponent<Animator>();
}
// Update is called once per frame
void FixedUpdate()
{
if (canGoForward)
{
moveForward = myRigidbody.transform.position;
moveForward.x += 0.05f;
myRigidbody.transform.position = moveForward;
}
if (canGoBack)
{
moveForward.x -= 0.05f;
myRigidbody.transform.position = moveForward;
}
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.A))
{
canGoForward = false;
canGoBack = true;
}
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.D))
{
canGoForward = true;
canGoBack = false;
}
float horizontal = Input.GetAxis("Horizontal");
isGrounded = IsGrounded();
Handle$$anonymous$$ovement(horizontal);
Flip(horizontal);
if (isGrounded && jump)
{
isGrounded = false;
myRigidbody.AddForce(new Vector2(0, jumpForce));
}
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.W))
{
jump = true;
}
if (myRigidbody.velocity.y > 0)
{
jump = false;
}
}
// ignore this
private void Handle$$anonymous$$ovement (float horizontal)
{
}
private void Flip(float horizontal)
{
if (horizontal > 0 && !facingRight || horizontal < 0 && facingRight)
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
private bool IsGrounded()
{
if (myRigidbody.velocity.y <= 0)
{
foreach (Transform point in groundPoints)
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(point.position, groundRadius, whatIsGround);
for (int i = 0; i <colliders.Length; i++)
{
if (colliders[i].gameObject != gameObject)
{
return true;
}
}
}
}
return false;
}
}