lemansky

Untitled

Feb 28th, 2021 (edited)
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.16 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class CustomMovement : MonoBehaviour
  6. {
  7.  
  8.     Rigidbody2D rb; // елемент от тип rigidbody
  9.  
  10.     [Header("Input keys")] // заглавие в болд, което се вижда в интерфейса
  11.     public Enums.KeyGroups typeOfControl = Enums.KeyGroups.ArrowKeys; // клавиши за управление (стрелки или WASD)
  12.     public float speed = 10f; // скорост на движение
  13.     float positionX; // къде трябва да се намира играчът след приключване на изчисленията
  14.  
  15.     [Header("Jump")] // заглавие
  16.     public KeyCode key = KeyCode.Space; // създаване на променлива от тип KeyCode и присвояване на space
  17.     public float jumpStrength = 15f; // сила на скок
  18.     bool Grounded; // променлива, с която да отчетем дали играчът е върху даден елемент (по-надолу в кода)
  19.                    // Use this for initialization
  20.     void Start()
  21.     {
  22.         rb = GetComponent<Rigidbody2D>(); // старт методът се изпълнява преди стартиране на играта
  23.                                           // присвоява се тялото на елементът, към който е добавен текущия(този) скрипт
  24.     }
  25.     private float moveHorizontal; // променлива, в която да присвоим дали играчът е избрал да се движи с
  26.                                   // стрелките или A/D -- това са настройките по подразбиране в Unity, може на horizontal и horizontal2
  27.                                   // да промените клавишите от Edit --> Project Settings --> Input
  28.  
  29.     // Update is called once per frame
  30.     void Update()
  31.     {
  32.         // от Unity -> Edit -> Project Settings -> Input Manager рестартирайте клавишите от трите точки -> Reset, така ще отпадне грешка Missing Input Button "Submit"
  33.         moveHorizontal = Input.GetAxis("Horizontal");
  34.        
  35.  
  36.         positionX = moveHorizontal * speed; // нека новата позиция да е натиснатия от потребителя клавиш A/D или вектор (-1,0)/(1,0),
  37.                                             // умножен по скороста.
  38.  
  39.         // следната проверка е, ако е задържан клавишът кey, който по-рано е настроен (space или друго)
  40.         // и играчът е заземен Grounded == true (в покой, не скача, с цел да не се създаде двоен, троен, четворен скок)
  41.         if (Input.GetKeyDown(key) && Grounded == true)
  42.         {
  43.             // да се добави продължителна сила по посока нагоре умножена по силата на скок * контролен фактор 50.
  44.             rb.AddForce(Vector2.up * jumpStrength * 50.0f);
  45.         }
  46.     }
  47.     // може да се изпълни 0 пъти, 1 път или много пъти според това колко physics frames на секунда са в
  48.     // time settings и колко е бърз frame rate-a, и код поставен в FixedUpdate се изпълнява преди
  49.     // геометрични/физични изчисления или прилагането на сила за движение върху елементите ще е в синхрон
  50.     // с рисуването на екрана. Играчът се движи като се приложи сила по хоринзонтала (това са физически изчисления)
  51.     void FixedUpdate()
  52.     {
  53.         // rigidoby2d.velocity е линейна сила на движение, представена като Вектор с посока (x, y) и
  54.         // изчислявана в единици на секунда,
  55.         rb.velocity = new Vector2(positionX, rb.velocity.y);
  56.     }
  57.  
  58.  
  59.     // методите OnCollisionEnter2D, OnCollisionExit2D и OnCollisionStay2D се изпълняват при допир на текущия елемент с друг
  60.     // елемент. В примерът collisionData e името на променливата, в която се пази информация за другият елемент, с който
  61.     // се допира текушия (този, към който е добавен скрипта). Нужно е да добавим към платформите нов таг с име Platform И по
  62.     // този начин ще следим за допир на елементът, имащ този скрипт и елементи, чиито таг е Platform
  63.     void OnCollisionEnter2D(Collision2D collisionData)
  64.     {
  65.         if (collisionData.gameObject.CompareTag("Platform"))
  66.         {  // ако елементът се допре до друг елемент с таг Platform, то текущия елемент, ще стане подчинен (дете)
  67.            // на елементът с таг Platform ( или по-конкретно collisionData). Така, когато играчът скочи върху движеща се
  68.            // платформа, той няма да увеличава своето движение под влияние на външната сила, а ще се движи заедно с платформата
  69.            // ако е в покой. Елементът (играчът) може да се движи свободно в платформата без да има нужда от този скрипт, той е
  70.            // единсвено да застопори играчът, да предотврати неговото плъзгане по платформата.
  71.             this.transform.parent = collisionData.transform;
  72.         }
  73.         Grounded = true;
  74.     }
  75.     // когато елементът спре да се допира до платформата, да престане да бъде й подчинен (дете)
  76.     void OnCollisionExit2D(Collision2D collisionData)
  77.     {
  78.         if (collisionData.gameObject.CompareTag("Platform"))
  79.         {
  80.             this.transform.parent = null;
  81.         }
  82.         Grounded = false;
  83.     }
  84. }
Add Comment
Please, Sign In to add comment