using System.Collections; using System.Collections.Generic; using UnityEngine; /* Author: Alexandrov Alexander Alexandrovich Date: 25/10/2019 Script that implement player character controller */ public class PlayerController : MonoBehaviour { public Transform playerCamera; public float speed = 250.0f; public float jumpForce = 12.0f; private Rigidbody2D _body; private BoxCollider2D _box; private Vector3 _camPos; void Start() { _body = GetComponent(); _box = GetComponent(); _camPos = playerCamera.transform.position; } void Update() { float deltaX = Input.GetAxis("Horizontal") * speed * Time.deltaTime; Vector2 movement = new Vector2(deltaX, _body.velocity.y); _body.velocity = movement; Vector3 max = _box.bounds.max; Vector3 min = _box.bounds.min; Vector2 corner1 = new Vector2(max.x, min.y - .1f); Vector2 corner2 = new Vector2(min.x, min.y - .2f); Collider2D hit = Physics2D.OverlapArea(corner1, corner2); bool grounded = false; if (hit != null) { grounded = true; } _body.gravityScale = grounded && deltaX == 0 ? 0 : 1; if (grounded && Input.GetKeyDown(KeyCode.Space)) { _body.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse); } MovingPlatform platform = null; if (hit != null) { platform = hit.GetComponent(); } //Checking if player character stay out on moving platform if (platform != null) { transform.parent = platform.transform; } else { transform.parent = null; } Vector3 pScale = Vector3.one; if (deltaX != 0) { transform.localScale = new Vector3(Mathf.Sign(deltaX)/pScale.x, 1/pScale.y, 1); } //Checking for player character moving out of screen edge. if (transform.position.x > playerCamera.transform.position.x + 9) { _camPos.x = _camPos.x + 18; playerCamera.transform.position = _camPos; playerCamera.GetComponentInChildren().flipX = !playerCamera.GetComponentInChildren().flipX; } else if (transform.position.x < playerCamera.transform.position.x - 9) { _camPos.x = _camPos.x - 18; playerCamera.transform.position = _camPos; playerCamera.GetComponentInChildren().flipX = !playerCamera.GetComponentInChildren().flipX; } } }