| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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<Animator>();
- rigbody = GetComponent<Rigidbody>();
- 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;
- }
- }
- }
|