OnCollisionEnter Problem
Why doesnt the onGround variable turn to true when the player collides with the object that i have tagged as Ground ?
using UnityEngine; using System.Collections;
public class Player : MonoBehaviour {
public float maxSpeed = 3;
public float speed = 10f;
public float jumpPower = 100f;
public bool onGround;
public bool gotin;
private Rigidbody2D rb2d;
private Animator anim;
void Start()
{
rb2d = gameObject.GetComponent<Rigidbody2D>();
anim = gameObject.GetComponent<Animator>();
}
void Update()
{
//Animator variables
anim.SetBool ("Grounded", onGround);
anim.SetFloat("speed",Mathf.Abs(rb2d.velocity.x));
//Turnimg back the player
if(Input.GetAxis("Horizontal") < -0.1f){
transform.localScale = new Vector3(-1,1,1);
}
if(Input.GetAxis("Horizontal") > 0.1f){
transform.localScale = new Vector3(1,1,1);
}
}
void FixedUpdate()
{
//Moving the player
float h = Input.GetAxis ("Horizontal");
rb2d.AddForce (Vector2.right * speed * h);
//Limiting Speed of the player
if(rb2d.velocity.x > maxSpeed)
{
rb2d.velocity = new Vector2(maxSpeed,rb2d.velocity.y);
}
if(rb2d.velocity.x < -maxSpeed)
{
rb2d.AddForce (Vector2.left * speed * h);
rb2d.velocity = new Vector2(-maxSpeed,rb2d.velocity.y);
}
}
//Check if grounded
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Ground") {
gotin = true;
onGround = true;
}
}
void OnCollisionExit(Collision col)
{
if(col.gameObject.tag == "Ground")
{
onGround = false;
}
}
}
Answer by ttesla · Nov 27, 2015 at 08:11 AM
It seems you are doing a 2D game. If you are working with 2d rigidbody and 2d colliders, you should use 2d version of CollisionEnter: "OnCollisionEnter2D(Collision2D col)"
Here: http://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html
it works but my onGround variable seems a little bit buggy cause sometimes whilemoving turns to flase and immediatly back to true ... anuway to fix this ?
nvm i fixed it by altering the way i do it a little bit.. thank you very much
Probably your character is bouncing when moving and that causes to enter-exit from collision. Check this video: https://unity3d.com/learn/tutorials/modules/beginner/2d/2d-controllers
And you will see this in the video:
IsGrounded = Physics2D.OverlapCircle(GroundCheck.position, mGroundRadius, WhatIsGround);
Your answer
Follow this Question
Related Questions
How can I make a collider that gives me stat up to stop giving me it? 0 Answers
**Trying to make a shield that slows downs bullets when bulletes enter** 2 Answers
OnCollisionEnter cant work with wheel colliders 1 Answer
void OnTriggerExit 3d not working on my script? 0 Answers
OnCollisionEnter not called when collider is enabled and already inside another collider 1 Answer