2d player controller for Pc and Mobile with joystick - unity engine
2d player controller for Pc and Mobile with joystick - unity engine
Easy way to make a 2d player controller for Pc and Mobile with joystick in unity engine
Mobile Joystick For Unity 2D EASY |
- 1 - 2D player controller for Pc platform :
- create a script and name it " PlayerController2D "
- open the script file
- copy past the following code :
- add Component : Rigidbody 2D and Collider 2D
- add Animator component if you want to make Character animation controller
using UnityEngine;using UnityEngine.Events;public class PlayerController2D : MonoBehaviour{[SerializeField] private float m_JumpForce = 400f; // Amount of force added when the player jumps.[Range(0, 1)] [SerializeField] private float m_CrouchSpeed = .36f; // Amount of maxSpeed applied to crouching movement. 1 = 100%[Range(0, .3f)] [SerializeField] private float m_MovementSmoothing = .05f; // How much to smooth out the movement[SerializeField] private bool m_AirControl = false; // Whether or not a player can steer while jumping;[SerializeField] private LayerMask m_WhatIsGround; // A mask determining what is ground to the character[SerializeField] private Transform m_GroundCheck; // A position marking where to check if the player is grounded.[SerializeField] private Transform m_CeilingCheck; // A position marking where to check for ceilings[SerializeField] private Collider2D m_CrouchDisableCollider; // A collider that will be disabled when crouchingconst float k_GroundedRadius = .2f; // Radius of the overlap circle to determine if groundedprivate bool m_Grounded; // Whether or not the player is grounded.const float k_CeilingRadius = .2f; // Radius of the overlap circle to determine if the player can stand upprivate Rigidbody2D m_Rigidbody2D;private bool m_FacingRight = true; // For determining which way the player is currently facing.private Vector3 m_Velocity = Vector3.zero;[Header("Events")][Space]public UnityEvent OnLandEvent;[System.Serializable]public class BoolEvent : UnityEvent<bool> { }public BoolEvent OnCrouchEvent;private bool m_wasCrouching = false;private void Awake(){m_Rigidbody2D = GetComponent<Rigidbody2D>();if (OnLandEvent == null)OnLandEvent = new UnityEvent();if (OnCrouchEvent == null)OnCrouchEvent = new BoolEvent();}private void FixedUpdate(){bool wasGrounded = m_Grounded;m_Grounded = false;// The player is grounded if a circlecast to the groundcheck position hits anything designated as ground// This can be done using layers instead but Sample Assets will not overwrite your project settings.Collider2D[] colliders = Physics2D.OverlapCircleAll(m_GroundCheck.position, k_GroundedRadius, m_WhatIsGround);for (int i = 0; i < colliders.Length; i++){if (colliders[i].gameObject != gameObject){m_Grounded = true;if (!wasGrounded)OnLandEvent.Invoke();}}}public void Move(float move, bool crouch, bool jump){// If crouching, check to see if the character can stand upif (!crouch){// If the character has a ceiling preventing them from standing up, keep them crouchingif (Physics2D.OverlapCircle(m_CeilingCheck.position, k_CeilingRadius, m_WhatIsGround)){crouch = true;}}//only control the player if grounded or airControl is turned onif (m_Grounded || m_AirControl){// If crouchingif (crouch){if (!m_wasCrouching){m_wasCrouching = true;OnCrouchEvent.Invoke(true);}// Reduce the speed by the crouchSpeed multipliermove *= m_CrouchSpeed;// Disable one of the colliders when crouchingif (m_CrouchDisableCollider != null)m_CrouchDisableCollider.enabled = false;} else{// Enable the collider when not crouchingif (m_CrouchDisableCollider != null)m_CrouchDisableCollider.enabled = true;if (m_wasCrouching){m_wasCrouching = false;OnCrouchEvent.Invoke(false);}}// Move the character by finding the target velocityVector3 targetVelocity = new Vector2(move * 10f, m_Rigidbody2D.velocity.y);// And then smoothing it out and applying it to the characterm_Rigidbody2D.velocity = Vector3.SmoothDamp(m_Rigidbody2D.velocity, targetVelocity, ref m_Velocity, m_MovementSmoothing);// If the input is moving the player right and the player is facing left...if (move > 0 && !m_FacingRight){// ... flip the player.Flip();}// Otherwise if the input is moving the player left and the player is facing right...else if (move < 0 && m_FacingRight){// ... flip the player.Flip();}}// If the player should jump...if (m_Grounded && jump){// Add a vertical force to the player.m_Grounded = false;m_Rigidbody2D.AddForce(new Vector2(0f, m_JumpForce));}}private void Flip(){// Switch the way the player is labelled as facing.m_FacingRight = !m_FacingRight;transform.Rotate(0f, 180f, 0f);}}
6 . Create The Scripte " PlayerMovement " :
using System.Collections;using System.Collections.Generic;using UnityEngine;public class PlayerMovement : MonoBehaviour {public PlayerController2D controller;public Animator animator;public float runSpeed = 40f;float horizontalMove = 0f;bool jump = false;bool crouch = false;// Update is called once per framevoid Update () {horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;animator.SetFloat("Speed", Mathf.Abs(horizontalMove));if (Input.GetButtonDown("Jump")){jump = true;animator.SetBool("IsJumping", true);}if (Input.GetButtonDown("Crouch")){crouch = true;} else if (Input.GetButtonUp("Crouch")){crouch = false;}}public void OnLanding (){animator.SetBool("IsJumping", false);}public void OnCrouching (bool isCrouching){animator.SetBool("IsCrouching", isCrouching);}void FixedUpdate (){// Move our charactercontroller.Move(horizontalMove * Time.fixedDeltaTime, crouch, jump);jump = false;}}
add the two scripts to your Player prefab , now the player can be able to move with the default Unity input system .
- 2 - 2D player controller for Mobile platform :
You don't need to create any script , just download this File
1 . After that Extract the Winrar in your Asset folder.
2 . already you Have the scripts : "PlayerController2D" and "PlayerMovement" .
a - open PlayerMovement.cs
3 . Add the library :
using UnityStandardAssets.CrossPlatformInput;
4 . And replace some line Like this:
horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;
By :
horizontalMove = CrossPlatformInputManager.GetAxisRaw("Horizontal") * runSpeed;
And replace:
if (Input.GetButtonDown("Jump"))
With:
if (CrossPlatformInputManager.GetButtonDown("Jump"))
5 . Now in your Canva create a new gameObjet , make the name like you want, inside it create 3 Buttons , Left , Right and Jump
6. now Follow the steps in images :
joystick unity 2d,unity simple 2d player controller,unity 2d character controller,unity new input system,unity gamepad,unity character controller
Post a Comment
image video quote pre code