------------------------
1. Δήλωση των απαραίτητων βιβλιοθηκών

using UnityEngine;

Εισάγει τη βιβλιοθήκη UnityEngine, η οποία είναι απαραίτητη για να χρησιμοποιήσουμε στοιχεία όπως MonoBehaviour, Rigidbody2D και μαθηματικές συναρτήσεις.

------------------------
2. Δήλωση της κλάσης Projectile2D

public class Projectile2D : MonoBehaviour

Ορίζουμε μια νέα κλάση με όνομα Projectile2D που κληρονομεί από το MonoBehaviour, επιτρέποντας να προσαρτηθεί ως Component σε ένα GameObject μέσα στη Unity.

------------------------
3. Δήλωση μεταβλητών

public float initialSpeed = 10f; // Αρχική ταχύτητα
public float launchAngle = 45f;  // Αρχική γωνία βολής (σε μοίρες)

public float initialSpeed = 10f;
Ορίζει την αρχική ταχύτητα του αντικειμένου σε 10 μονάδες (πιθανώς Unity units per second).
Είναι public, επομένως μπορούμε να την τροποποιήσουμε μέσα από το Inspector της Unity.

public float launchAngle = 45f;
Ορίζει τη γωνία εκτόξευσης σε 45 μοίρες.

private Rigidbody2D rb;
Δηλώνεται μια ιδιωτική μεταβλητή rb τύπου Rigidbody2D, η οποία θα χρησιμοποιηθεί για τη διαχείριση της φυσικής του αντικειμένου.

------------------------
4. Μέθοδος Start()

void Start()

Η Start() εκτελείται μία φορά κατά την έναρξη του παιχνιδιού, όταν το αντικείμενο ενεργοποιηθεί.

------------------------
5. Αρχικοποίηση του Rigidbody2D

rb = GetComponent<Rigidbody2D>();

Ανακτά το Rigidbody2D που είναι συνδεδεμένο στο GameObject και το αποθηκεύει στη μεταβλητή rb.

------------------------
6. Μετατροπή της γωνίας από μοίρες σε ακτίνια

float angleRad = launchAngle * Mathf.Deg2Rad;

Στη Unity, οι γωνίες των τριγωνομετρικών συναρτήσεων εκφράζονται σε ακτίνια (radians), οπότε μετατρέπουμε τις μοίρες (launchAngle) σε ακτίνια χρησιμοποιώντας τον συντελεστή Mathf.Deg2Rad, που ισούται με π/180.

------------------------
7. Δημιουργία διανύσματος ταχύτητας

Vector2 velocity = new Vector2(Mathf.Cos(angleRad), Mathf.Sin(angleRad)) * initialSpeed;

Δημιουργούμε ένα διάνυσμα ταχύτητας (Vector2 velocity) βασισμένο στην τριγωνομετρία:
Mathf.Cos(angleRad): Υπολογίζει το x συστατικό (οριζόντια ταχύτητα).
Mathf.Sin(angleRad): Υπολογίζει το y συστατικό (κατακόρυφη ταχύτητα).
Πολλαπλασιάζουμε και τα δύο με το initialSpeed για να έχουμε την πραγματική ταχύτητα.

------------------------
8. Εφαρμογή της ταχύτητας στο Rigidbody2D

rb.velocity = velocity;

Ορίζουμε την αρχική ταχύτητα του Rigidbody2D, ώστε το αντικείμενο να ξεκινήσει την κίνησή του ακολουθώντας το υπολογισμένο διάνυσμα.

------------------------
Περίληψη
Αυτό το πρόγραμμα εφαρμόζεται σε ένα GameObject που έχει Rigidbody2D. Μόλις ξεκινήσει το παιχνίδι:

Βρίσκει το Rigidbody2D του αντικειμένου.
Υπολογίζει την αρχική ταχύτητα χρησιμοποιώντας γωνία και ταχύτητα.
Εφαρμόζει τη ταχύτητα στο αντικείμενο ώστε να κινηθεί στην επιθυμητή κατεύθυνση.
Έτσι, αν εφαρμοστεί σε ένα αντικείμενο (π.χ., μια μπάλα ή ένα βλήμα), αυτό θα κινηθεί σε καμπύλη τροχιά λόγω της βαρύτητας.

Το Rigidbody2D κάθε αντικειμένου στη Unity είναι διαφορετικό και μοναδικό για το συγκεκριμένο GameObject στο οποίο είναι συνδεδεμένο.

Πώς λειτουργεί το Rigidbody2D ανά αντικείμενο;
Κάθε GameObject μπορεί να έχει το δικό του Rigidbody2D.
Το Rigidbody2D ενός αντικειμένου δεν επηρεάζει το Rigidbody2D ενός άλλου, εκτός αν υπάρξει σύγκρουση ή αν εφαρμοστούν δυνάμεις μεταξύ τους.
Όταν χρησιμοποιούμε GetComponent<Rigidbody2D>(), παίρνουμε το Rigidbody2D του συγκεκριμένου αντικειμένου στο οποίο είναι συνδεδεμένο το σκριπτ.

Κάθε Rigidbody2D αποθηκεύει ξεχωριστά τις φυσικές ιδιότητες του αντικειμένου του, όπως:
- Ταχύτητα (velocity)
- Περιστροφή (angularVelocity)
- Μάζα (mass)
- Τριβή (drag, angularDrag)
- Τύπο σώματος (bodyType: Dynamic, Kinematic, Static)
------------------------
