- Home /
Other
Platformer cat not jumping and is flinging across the map when hitting a corner
I just started using Unity so I watched a 2D platformer tutorial. I did what it told me and the project worked perfectly, so I started making a platformer thing. I have two problems.
When I press the spacebar, W key or up arrow the cat will not jump. The groundCheck is assigned. This is the script:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class CatController : MonoBehaviour {
[HideInInspector] public bool facingRight = true;
[HideInInspector] public bool jump = false;
public float moveForce = 365f;
public float maxSpeed = 5f;
public float jumpForce = 1000f;
public Transform groundCheck;
private bool grounded = false;
private Rigidbody2D rb2d;
void Awake()
{
rb2d = GetComponent<Rigidbody2D>();
}
void Update()
{
grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
if (Input.GetButtonDown("Jump") && grounded)
{
jump = true;
}
}
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
if (h * rb2d.velocity.x < maxSpeed)
rb2d.AddForce(Vector2.right * h * moveForce);
if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
rb2d.velocity = new Vector2(Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);
if (h > 0 && !facingRight)
Flip ();
else if (h < 0 && facingRight)
Flip ();
if (jump)
{
rb2d.AddForce(new Vector2(0f, jumpForce));
jump = false;
}
}
void Flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
I needed to record a video for this problem. When the cat hits a corner, they fling across the room. As silly as it looks, I don't think that should be happening. This is the video:
Thanks.
Answer by sandro_lord · Sep 08, 2018 at 10:52 AM
i don't know the problem about jumping but i can help you with fling. all you have to do is in rigidbody go and click "freeze rotation z" like this:
about the jumping problem, i don't know linecast but if i were you i would have made a triggered collider under your cat. if it collides something then let it jump. like this:
private void OnTriggerEnter2D(Collider2D collision)
{
grounded=true;
}
private void OnTriggerExit2D(Collider2D collision)
{
grounded=false;
}
as simple as that.
Follow this Question
Related Questions
2D jumping raycast question 0 Answers
2D Sidescroller enemy AI jump help! Picture Included! 3 Answers
auto jumping to a platform 0 Answers
How do i achieve a rounded jump arc? 1 Answer