- Home /
My 2d player controller doesnt work very well. Any tips on fixing it?
So my player cotntroller is pretty simple, but very buggy. First of all I want to try and eliminate the bool used for jumping as it makes the tilemap levels im building much harder to make. Secondly the player can stick to walls if you hold forward against them, any way to fix this? And tips or advice would be much appriciated.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Sprites;
public class playerController : MonoBehaviour {
//MOVEMENT
[Tooltip("The maximum horizontal movement speed in units per second.")]
public float speed = 8; // movenment speed for Luca
[Tooltip("The maximum vertical jump speed in units per second.")]
public float jumpspd = 12; // jumo height for Luca
//ANIMATION
public Animator anim;
bool canDash = true;
bool grounded;
bool isRunning;
public SpriteRenderer ren;
//UNUSED AS OF NOW
public static float LucaHP;
public static float LucaSP;
public GameObject hitbox;
public static float damage;
//TODO: MOVE ONTO NEW SCRIPT
// Use this for initialization
void Start()
{
anim = gameObject.GetComponent<Animator>();
anim.SetBool("isRunning", false);
anim.SetBool("dashing", false);
canDash = true;
}
// Update is called once per frame
void Update()
{
playermove();
HandleFlip();
HandleJump();
HandleDash();
}
private void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag == "ground")
{
grounded = true;
}
}
void playermove()
{
float axixX = Input.GetAxis("Horizontal");
transform.Translate(new Vector3(axixX, 0) * Time.deltaTime * speed);
if (Input.GetButton("Horizontal"))
{
isRunning = true;
}
else
{
isRunning = false;
}
anim.SetBool("isRunning", isRunning);
}
void HandleJump()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (grounded == true)
{
GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, jumpspd);
grounded = false;
}
}
}
void HandleDash()
{
if (Input.GetKeyDown(KeyCode.LeftShift))
{
StartCoroutine(dash());
}
}
void HandleFlip()
{
if (Input.GetKeyDown(KeyCode.A))
{
ren.flipX = true;
}
if (Input.GetKeyDown(KeyCode.D))
{
ren.flipX = false;
}
}
IEnumerator dash()
{
if (canDash == true)
{
canDash = false;
anim.SetBool("dashing", true);
if (ren.flipX == true)
{
GetComponent<Rigidbody2D>().velocity = new Vector2(-jumpspd / 2, GetComponent<Rigidbody2D>().velocity.y);
}
else
{
GetComponent<Rigidbody2D>().velocity = new Vector2(jumpspd / 2, GetComponent<Rigidbody2D>().velocity.y);
}
yield return new WaitForSeconds(0.5f);
anim.SetBool("dashing", false);
canDash = true;
}
}
}
Answer by Pixel-Wolves · Nov 19, 2020 at 05:44 PM
I can't help you with the jumping bool, buth I do can with the second problem:
Create e "Physic Material 2D" and set the float "Friction" as zero, then insert the "Physic Material 2D" in the colliders of the player and the tilemap, then the player won't get stocked in walls.
Your answer
Follow this Question
Related Questions
Player wont jump (visual script),2d player does not jump (visual script) 1 Answer
Trying to make a 2d object launch towards the mouse when I left click. can anyone help? 2 Answers
Graceful 2D collision enabling/disabling for topdown jumping 1 Answer
How can I stop my player from jumping off of vertical surfaces? 0 Answers
How do I prevent my character from crouching when jumping? 2 Answers