So, I am a beginner. Just started attempting to make a platformer today instead of following planned projects for once. . I was trying my best to work through it without to much copy and pasting of code and using it to build my knowledge as a beginner. I have gotten confused on rotating the sprite when walking left and right though. Could you tell me how to make my code work for this ?
Atm with how it is now it will rotate in that direction at a fixed speed when i run and it just keeps turning around in circles. Going nowhere fast. lol I estimate this question is probably pretty simple to solve. As I’m obviously just not using the correct method.
My second question however i think is a bit tougher. Basically with the code set up in the current way i can get my sprite to jump pretty consistently without double jumps. Which is better then what i have had in the past. But what i need to do is completely normalize the jumping “thrust”. With things how they are now every once in awhile i will get a high jump anywhere between 2 to 5 times my normal jump height. This cant happen if im trying to jump between platforms and have crates to stack in order to navigate longer jumps like i have set up now in my sample scene that i just started working on. Is there a way to set a failsafe to make sure the jumps stay consistant in height and distance with a rigidbody 2d like i have now ? Or better yet is there a way to do that as a beginner without being completely confused as to how it works. Thanks for your time and hope to hear back on this. I am sure my first question is kind of stupid but cant seem to figure it out.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class playerController : MonoBehaviour
{
[SerializeField]
private Animator playeranim;
private Rigidbody2D rb2d;
// private BoxCollider2D box2d;
[SerializeField]
private int thrust = 100;
[SerializeField]
private int jumpHeight = 50;
[SerializeField]
private int canJump;
private Vector2 direction;
// Use this for initialization
void Start ()
{
rb2d = gameObject.GetComponent<Rigidbody2D>();
// box2d = gameObject.GetComponent<BoxCollider2D>();
}
// Update is called once per frame
void Update ()
{
RotateDirection();
playeranim = gameObject.GetComponent<Animator>();
rigidbodymovement();
}
private void rigidbodymovement()
{
if (Input.GetKey(KeyCode.D))
{
playeranim.SetInteger("running", 2);
rb2d.AddForce(transform.right * thrust * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.A))
{
playeranim.SetInteger("running", 2);
rb2d.AddForce(-transform.right * thrust * Time.deltaTime);
}
else
playeranim.SetInteger("running", 0);
playeranim.SetInteger("jump", 0);
if (Input.GetKeyDown(KeyCode.Space)) // todo fix double jump and a glitch where the player
turns his body when jumping and controls glitch
{
if( canJump > 1)
{
canJump = canJump - 1;
rb2d.AddForce(new Vector2(0, 1) * jumpHeight * Time.deltaTime);
}
}
{
}
// }
//else
//{
// playeranim.SetBool("is_Running", false);
// playeranim.SetBool("is_Idle", true);
// }
}
private void OnCollisionEnter2D(Collision2D collision)
{
switch ( collision.gameObject.tag)
{
case "water":
{
Invoke("death", 1f);
break;
}
case "floor":
{
Debug.Log("i am touching the floor");
canJump = 2;
break;
}
default:
{
canJump = 1;
break;
}
}
}
private void RotateDirection()
{
transform.Rotate(direction);
direction = Vector2.zero;
if (Input.GetKey(KeyCode.A))
{
direction += new Vector2(0, 1);
}
if (Input.GetKey(KeyCode.D))
{
direction += new Vector2(0,1 );
}
}
private void death()
{
SceneManager.LoadScene(0);
}
}