Check Ground Detection not working.
Hi folks, I'm very new to C# and coding in general and im having some trouble with ground checks for my 2D platformer.
I got 'onJump' to work but cannot seem to enable the system to detect when I am on the ground. I have attached an empty object to my player and moved it to the correct possition, In my code I have added
void OnCollisionEnter2D(Collision2D col) //2D REQUIRED AT END OF (COLLISION2D COL) { if (col.gameObject.tag == "ground") //GROUND TAG EXACTLY LIKE TAG IN UNITY { isJumping = false; }
ensure the layers are name correctly but still no detection. Please excuse my code if it is a little hectic I am just getting used to structures and naming conventions. I have added my code below;
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
//MOVEMENT CONTROL AND SPEEDS
public float speed = 4f; //SPEED FLOAT FOR PLAYER
public float jumpHeight;
public bool isJumping = false;
public bool grounded = true;
bool interact = false;
float jumpTime, JumpDelay = .5f;
//RAYCASTING
RaycastHit2D playerHit;
RaycastHit2D interacted;
public Transform lineStart, lineEnd;
//ANNIMATOR
Animator anim;
void Raycasting()
{
//PLAYER INTERACTING WITH ENEMY
Debug.DrawLine(lineStart.position, lineEnd.position, Color.green);
if (Physics2D.Linecast(lineStart.position, lineEnd.position, 1 << LayerMask.NameToLayer("Enemy")))
{
//STORE ENEMY HIT INTO PLAYER HIT VARIABLE -- JUST SPECIFIC ENEMY NOT ALL
playerHit = Physics2D.Linecast(lineStart.position, lineEnd.position, 1 << LayerMask.NameToLayer("Enemy"));
interact = true;
}
else
{
interact = false;
}
if(Input.GetKeyDown(KeyCode.E) && interact == true)
{
Destroy(playerHit.collider.gameObject); //DESTROY ENEMY COLLIDER ONLY!
}
}
void Start()
{
anim = GetComponent<Animator>();
}
void Update()
{
Movement(); //CALL MOVEMENT
Raycasting();
}
void Movement()
{
anim.SetFloat("speed", Mathf.Abs(Input.GetAxis("Horizontal")));
if (Input.GetAxisRaw("Horizontal") > 0)
{
transform.Translate(Vector2.right * speed * Time.deltaTime);
transform.eulerAngles = new Vector2(0, 0);
}
if (Input.GetAxisRaw("Horizontal") < 0)
{
transform.Translate(Vector2.right * speed * Time.deltaTime);
transform.eulerAngles = new Vector2(0, 180); //EULERANGLE CHANGES PLAYER X OR Y ANGLE
}
if (Input.GetKeyDown(KeyCode.Space))
{
if (isJumping == false) //!isjumping CAN ALSO BE USED INSTEAD OF == FALSE
{
GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight);
isJumping = true;
}
}
}
void OnCollisionEnter2D(Collision2D col) //2D REQUIRED AT END OF (COLLISION2D COL)
{
if (col.gameObject.tag == "ground") //GROUND TAG EXACTLY LIKE TAG IN UNITY
{
isJumping = false;
}
}
}
Your answer
Follow this Question
Related Questions
how to connect WEBRTC in unity ? 2 Answers
Networking With Colors Unity 5 2 Answers
[UNET] Can't spawn players with code 1 Answer
[uNet] Multiple Spawnpoints with Selection 0 Answers
Enemy AI for Multiplayer (using NavMeshAgent) unity 5.6.5f1 0 Answers