using UnityEngine; namespace Cinemachine.Examples { [AddComponentMenu("")] // Don't display in add component menu public class CharacterMovement2D : MonoBehaviour { public KeyCode sprintJoystick = KeyCode.JoystickButton2; public KeyCode jumpJoystick = KeyCode.JoystickButton0; public KeyCode sprintKeyboard = KeyCode.LeftShift; public KeyCode jumpKeyboard = KeyCode.Space; public float jumpVelocity = 7f; public float groundTolerance = 0.2f; public bool checkGroundForJump = true; private float speed = 0f; private bool isSprinting = false; private Animator anim; private Vector2 input; private float velocity; private bool headingleft = false; private Quaternion targetrot; private Rigidbody rigbody; // Use this for initialization void Start () { anim = GetComponent(); rigbody = GetComponent(); targetrot = transform.rotation; } // Update is called once per frame void FixedUpdate () { input.x = Input.GetAxis("Horizontal"); // Check if direction changes if ((input.x < 0f && !headingleft) || (input.x > 0f && headingleft)) { if (input.x < 0f) targetrot = Quaternion.Euler(0, 270, 0); if (input.x > 0f) targetrot = Quaternion.Euler(0, 90, 0); headingleft = !headingleft; } // Rotate player if direction changes transform.rotation = Quaternion.Lerp(transform.rotation, targetrot, Time.deltaTime * 20f); // set speed to horizontal inputs speed = Mathf.Abs(input.x); speed = Mathf.SmoothDamp(anim.GetFloat("Speed"), speed, ref velocity, 0.1f); anim.SetFloat("Speed", speed); // set sprinting if ((Input.GetKeyDown(sprintJoystick) || Input.GetKeyDown(sprintKeyboard))&& input != Vector2.zero) isSprinting = true; if ((Input.GetKeyUp(sprintJoystick) || Input.GetKeyUp(sprintKeyboard))|| input == Vector2.zero) isSprinting = false; anim.SetBool("isSprinting", isSprinting); // Jump if ((Input.GetKeyDown(jumpJoystick) || Input.GetKeyDown(jumpKeyboard)) && isGrounded()) { rigbody.velocity = new Vector3(input.x, jumpVelocity, 0f); } } public bool isGrounded() { if (checkGroundForJump) return Physics.Raycast(transform.position, Vector3.down, groundTolerance); else return true; } } }