Ο απόλυτος οδηγός για αρχάριους για την ανάπτυξη παιχνιδιών στο Unity

Το Unity είναι ένα εξαιρετικό εργαλείο για τη δημιουργία πρωτοτύπων από τα παιχνίδια έως τις διαδραστικές απεικονίσεις. Σε αυτό το άρθρο, εξετάζουμε όλα όσα πρέπει να γνωρίζετε για να ξεκινήσετε να χρησιμοποιείτε το Unity.

Πρώτον, λίγο για μένα: Είμαι προγραμματιστής χόμπι ενότητα, τρισδιάστατος μοντελιστής και γραφίστας που συνεργάστηκε με τα Unity και Blender για πάνω από 5 χρόνια. Είμαι τώρα φοιτητής Οικονομικών Μαθηματικών στο University College του Δουβλίνου και περιστασιακά κάνω ανεξάρτητη γραφιστική, πρωτότυπα ιστού και πρωτότυπα παιχνιδιών.

Εισαγωγή

Αυτό το άρθρο απευθύνεται σε οποιονδήποτε δεν έχει χρησιμοποιήσει ποτέ το Unity στο παρελθόν, αλλά έχει κάποια προηγούμενη εμπειρία προγραμματισμού ή στο σχεδιασμό / ανάπτυξη ιστοσελίδων Μέχρι το τέλος αυτού του άρθρου, θα πρέπει να έχετε μια καλή γενική επισκόπηση του κινητήρα, καθώς και όλες τις απαραίτητες λειτουργίες και τον κώδικα για να ξεκινήσετε να δημιουργείτε ένα βασικό παιχνίδι.

Γιατί η Ενότητα;

Εάν θέλετε να κάνετε παιχνίδια

Υπάρχουν πραγματικά πολύ λίγες επιλογές όσον αφορά την ανάπτυξη παιχνιδιών Indie. Οι τρεις κύριες επιλογές αν θέλετε να δημιουργήσετε παιχνίδια είναι Unreal, Unity ή GameMaker.

Η ενότητα είναι πιθανώς η λιγότερο γνωστή από τις 3 πλατφόρμες. Σας δίνει ένα πολύ ακατέργαστο προϊόν έξω από το κουτί, αλλά είναι πολύ ευέλικτο, καλά τεκμηριωμένο και εξαιρετικά επεκτάσιμο για να δημιουργήσετε σχεδόν οποιοδήποτε είδος παιχνιδιού μπορείτε να σκεφτείτε.

Υπάρχουν πολλά εξαιρετικά επιτυχημένα παιχνίδια, όπως Escape from Tarkov (FPS), Monument Valley (Puzzler) και This War of Mine (Strategy / Survival) όλα ενσωματωμένα στο Unity.

Στην πραγματικότητα, ο κινητήρας στον οποίο βασίζεστε το πρώτο σας παιχνίδι πιθανότατα δεν είναι κρίσιμος, οπότε η συμβουλή μου είναι απλώς να επιλέξετε ένα και να το ακολουθήσετε.

Εάν θέλετε να κάνετε πρωτότυπο εμπειρίες χρήστη

Δεδομένου ότι η ενότητα είναι απλώς ένας κινητήρας με ένα σωρό φυσική, κινούμενη εικόνα και τρισδιάστατη απόδοση σε πραγματικό χρόνο, είναι επίσης ένας εξαιρετικός χώρος για να δημιουργήσετε πλήρως διαδραστικά πρωτότυπα για μελέτες UX.

Το Unity έχει πλήρη υποστήριξη για VR και AR και ως εκ τούτου θα μπορούσε να είναι ένα εξαιρετικό εργαλείο για την εξερεύνηση της αρχιτεκτονικής, των αυτοματισμών και των προσομοιώσεων με τους πελάτες.

Ενότητες σε αυτό το άρθρο

  • Γιατί η Ενότητα;
  • Παράθυρο επεξεργαστή Unity
  • Αντικείμενα παιχνιδιού Unity
  • Unity Builtin Στοιχεία
  • Δημιουργία προσαρμοσμένων στοιχείων
  • Δομή ενός MonoBehaviour
  • Χειρισμός GameObjects
  • Ραϊνστάινγκ
  • Ανίχνευση σύγκρουσης
  • Προηγμένες δυνατότητες
  • Συμβουλές για νεοεισερχόμενους
  • Ωραίοι πόροι και κοινότητες
  • συμπέρασμα

Παράθυρο επεξεργαστή Unity

Το παράθυρο του προγράμματος επεξεργασίας χωρίζεται σε μερικές ενότητες. Θα το καλύψουμε πολύ σύντομα καθώς θα το αναφερόμαστε συνεχώς σε όλο το άρθρο. Αν είστε εξοικειωμένοι με αυτό, παραλείψτε το παρελθόν

Προβολή σκηνής: Επιτρέπει την τοποθέτηση και την κίνηση του GameObjects στο Scene Game View: Προεπισκόπηση του τρόπου με τον οποίο ο παίκτης θα δει τη σκηνή από την κάμερα Επιθεωρητής: Παρέχετε λεπτομέρειες σχετικά με το επιλεγμένο GameObject στη σκηνή. Ενεργητικό / Έργο: Όλες οι προκατασκευές, υφές, μοντέλα, scripts κλπ αποθηκεύονται εδώ Ιεραρχία: Επιτρέπει φωλιάσματος και τη διάρθρωση της GameObjects μέσα στη σκηνή

Τώρα είμαστε καλοί να ξεκινήσουμε!

Αντικείμενα παιχνιδιού Unity

Τι είναι το GameObjects

Τα GameObjects είναι το βασικό δομικό στοιχείο όλων των μηχανών Unity games. Το όνομα το δίνει σχεδόν:

Οτιδήποτε τοποθετείτε σε μια σκηνή στο Unity πρέπει να είναι τυλιγμένο σε ένα «αντικείμενο παιχνιδιού».

Αν έχετε φόντο σχεδίασης ιστοσελίδων, μπορείτε να σκεφτείτε το GameObjects σαν στοιχεία σαν! Εξαιρετικά βαρετά δοχεία, αλλά είναι εξαιρετικά επεκτάσιμα για τη δημιουργία σύνθετων λειτουργιών ή οπτικών.

Κυριολεκτικά τα πάντα, από εφέ σωματιδίων, κάμερες, συσκευές αναπαραγωγής, στοιχεία διεπαφής χρήστη,… (η λίστα συνεχίζεται) είναι ένα GameObject.

Δημιουργία Ιεραρχίας

Όπως και στην ανάπτυξη ιστού, το GameObject είναι επίσης ένα κοντέινερ. Ακριβώς όπως θέλετε να δημιουργήσετε ποικίλες και επιθυμητές διατάξεις ή αφαιρέσεις, ίσως θέλετε να κάνετε το ίδιο με αντικείμενα παιχνιδιών.

Η λογική πίσω από τα αντικείμενα παιχνιδιού ένθεσης είναι σχεδόν ίδια με την ανάπτυξη ιστού, θα δώσω μερικά παραδείγματα…

Ακαταστασία & αποτελεσματικότητα

Αναλογία Ιστού: Έχετε πολλά παρόμοια στοιχεία που μπορεί να δημιουργηθούν δυναμικά εν κινήσει ως απάντηση στην αλληλεπίδραση των χρηστών και θέλετε να τα διατηρήσετε τακτοποιημένα. Unity Translation: Το κτίριό σας είναι κλώνος Minecraft και έχετε πολλά μπλοκ στη σκηνή, πρέπει να προσθέσετε και να αφαιρέσετε «κομμάτια» μπλοκ από τη σκηνή για λόγους απόδοσης. Έτσι, έχοντας τους γονείς σε ένα άδειο GameObject για κάθε κομμάτι έχει νόημα, καθώς η διαγραφή του γονέα κομματιού αφαιρεί όλα τα μπλοκ των παιδιών.

Θέση

Αναλογία Ιστού: Θέλετε να διατηρήσετε τη θέση του περιεχομένου που περιέχεται «σχετικά» με το κοντέινερ και όχι με την ιστοσελίδα. Unity Translation: Έχετε δημιουργήσει μια σειρά από βοηθητικά drone που αιωρούνται γύρω από τη συσκευή αναπαραγωγής. Πραγματικά δεν θα προτιμούσατε να γράψετε κώδικα για να τους πείτε να κυνηγήσουν τον παίκτη, οπότε αντ 'αυτού τους δημιουργείτε ως παιδιά του αντικειμένου παιχνιδιού παίκτη.

Unity Builtin Στοιχεία

Το μοντέλο του ηθοποιού

Τα GameObjects από μόνα τους είναι αρκετά άχρηστα - όπως έχουμε δει ότι είναι σχεδόν απλά κοντέινερ. Για να προσθέσουμε λειτουργικότητα σε αυτά πρέπει να προσθέσουμε στοιχεία, τα οποία είναι ουσιαστικά σενάρια γραμμένα είτε σε C # είτε σε Javascript.

Το Unity λειτουργεί με ένα μοντέλο Actor Component, απλά το GameObjects είναι οι ηθοποιοί και τα Components είναι τα σενάρια σας.

Εάν έχετε γράψει οποιεσδήποτε εφαρμογές ιστού πριν εξοικειωθείτε με την ιδέα δημιουργίας μικρών επαναχρησιμοποιήσιμων στοιχείων όπως κουμπιά, στοιχεία φόρμας, ευέλικτες διατάξεις που έχουν διάφορες διαφορετικές οδηγίες και προσαρμόσιμες ιδιότητες. Στη συνέχεια, η συγκέντρωση αυτών των μικρών στοιχείων σε μεγαλύτερες ιστοσελίδες.

Το μεγάλο πλεονέκτημα αυτής της προσέγγισης είναι το επίπεδο επαναχρησιμοποίησης και σαφώς καθορισμένων διαύλων επικοινωνίας μεταξύ των στοιχείων. Ομοίως, στην ανάπτυξη παιχνιδιών, θέλουμε να ελαχιστοποιήσουμε τον κίνδυνο ανεπιθύμητων παρενεργειών. Τα μικρά σφάλματα τείνουν να ξεφεύγουν από τον έλεγχο εάν δεν είστε προσεκτικοί και είναι εξαιρετικά δύσκολο να εντοπίσετε σφάλματα. Έτσι, η δημιουργία μικρών, στιβαρών και επαναχρησιμοποιήσιμων εξαρτημάτων είναι κρίσιμη.

Βασικά ενσωματωμένα στοιχεία

Νομίζω ότι είναι καιρός για μερικά παραδείγματα των ενσωματωμένων στοιχείων που παρέχονται από τη μηχανή Unity Games.

  • MeshFilter: Σας επιτρέπει να αντιστοιχίσετε υλικά σε τρισδιάστατο πλέγμα σε ένα GameObject
  • MeshRender: Σας επιτρέπει να αντιστοιχίσετε υλικό σε ένα 3D Mesh
  • [Πλαίσιο | Mesh] Collider: Επιτρέπει την ανίχνευση του GameObject κατά τη διάρκεια συγκρούσεων
  • Rigidbody: Επιτρέπει τη ρεαλιστική προσομοίωση φυσικής για δράση στο GameObjects με τρισδιάστατα πλέγματα και θα προκαλέσει συμβάντα ανίχνευσης σε συγκρούσεις κουτιών
  • Φως: Φωτίζει τμήματα της σκηνής σας
  • Κάμερα: Ορίζει τη θύρα προβολής του προγράμματος αναπαραγωγής που θα προσαρτηθεί σε ένα GameObject
  • Διάφορα στοιχεία καμβά UI για την εμφάνιση GUI

Υπάρχουν πολλά περισσότερα, αλλά αυτά είναι τα κύρια που πρέπει να εξοικειωθείτε. Μια συμβουλή είναι ότι μπορείτε να έχετε πρόσβαση σε όλα τα έγγραφα για αυτά μέσω του εγχειριδίου ενότητα και της αναφοράς σεναρίων εκτός σύνδεσης όπου κι αν βρίσκεστε:

Δημιουργία προσαρμοσμένων στοιχείων

Τα ενσωματωμένα στοιχεία ελέγχουν κυρίως τη φυσική και τα οπτικά, αλλά για να δημιουργήσετε ένα παιχνίδι, θα πρέπει να αποδεχτείτε την είσοδο του χρήστη και να χειριστείτε αυτά τα τυπικά στοιχεία καθώς και τα ίδια τα GameObjects

Για να ξεκινήσετε τη δημιουργία στοιχείων, μεταβείτε στο GameObject που θέλετε> Προσθήκη στοιχείου> πληκτρολογήστε το όνομα του νέου σας στοιχείου στη γραμμή αναζήτησης> νέο σενάριο (c #).

Ως γενική σύσταση, θα συνιστούσα να μην χρησιμοποιείτε το Javascript στο Unity. Δεν έχει ενημερωθεί με όλα τα υπέροχα πράγματα που συνοδεύουν το ES6 και τα περισσότερα από τα πιο προηγμένα πράγματα βασίζονται σε C # πράγματα που μεταφέρονται στο Javascript… Απλώς γίνεται ένα τεράστιο έργο στην εμπειρία μου.

Δομή ενός MonoBehaviour

Βασικές λειτουργίες

Όλα τα στοιχεία κληρονομούνται από την τάξη MonoBehaviour. Περιλαμβάνει διάφορες τυπικές μεθόδους, το πιο σημαντικό:

  • void Start () που καλείται κάθε φορά που ένα αντικείμενο που περιέχει το σενάριο δημιουργείται στη σκηνή. Αυτό είναι χρήσιμο όποτε θέλουμε να εκτελέσουμε κάποιον κώδικα αρχικοποίησης, π.χ. ορίστε τον εξοπλισμό ενός παίκτη μετά τον αγώνα σε έναν αγώνα.
  • void Update () που καλείται κάθε καρέ. Εδώ θα πάει το μεγαλύτερο μέρος του κώδικα που περιλαμβάνει είσοδο χρήστη, ενημερώνοντας διάφορες ιδιότητες όπως η κίνηση του προγράμματος αναπαραγωγής στη σκηνή.

Μεταβλητές επιθεωρητή

Συχνά θέλουμε να κάνουμε τα συστατικά όσο το δυνατόν πιο ευέλικτα. Για παράδειγμα, όλα τα όπλα μπορεί να έχουν διαφορετική ζημιά, ρυθμό πυρκαγιάς, has_sight κλπ. Ενώ όλα τα όπλα είναι ουσιαστικά το ίδιο πράγμα, ίσως θέλουμε να είμαστε σε θέση να δημιουργήσουμε γρήγορα διαφορετικές παραλλαγές μέσω του προγράμματος επεξεργασίας ενότητας.

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

Μπορούμε να το κάνουμε εύκολα δηλώνοντάς τα ως δημόσιες μεταβλητές στο σώμα του στοιχείου.

Αποδοχή εισόδου χρήστη

Φυσικά, θέλουμε το παιχνίδι μας να ανταποκρίνεται στις πληροφορίες των χρηστών. Οι πιο συνηθισμένοι τρόποι για να το κάνετε είναι να χρησιμοποιήσετε τις ακόλουθες μεθόδους στη συνάρτηση Update () ενός στοιχείου (ή οπουδήποτε αλλού θέλετε):

  • Input.GetKey (KeyCode.W) Επιστρέφει το πλήκτρο True W πατημένο
  • Input.GetKeyDown (KeyCode.W) Επιστρέφει True όταν πατάτε πρώτα το πλήκτρο W
  • Input.GetAxis ("Vertical"), Input.GetAxis ("Horizontal") Επιστρέφει μεταξύ -1,1 κίνηση εισόδου ποντικιού

Χειρισμός GameObjects

Μόλις έχουμε την είσοδο χρήστη θέλουμε το GameObjects στη σκηνή μας να ανταποκριθεί. Υπάρχουν διάφοροι τύποι απαντήσεων που μπορεί να εξετάσουμε:

  • Μετάφραση, περιστροφή, κλίμακα
  • Δημιουργήστε νέα GameObjects
  • Αποστολή μηνυμάτων σε υπάρχοντα GameObjects / components

Μεταμορφώσεις

Όλα τα GameObjects έχουν μια ιδιότητα μετασχηματισμού που επιτρέπει την εκτέλεση διάφορων χρήσιμων χειρισμών στο τρέχον αντικείμενο παιχνιδιού.

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

Σε γενικές γραμμές, είναι καλή πρακτική να χρησιμοποιείτε τοπική [Θέση, Περιστροφή] και όχι την καθολική θέση / περιστροφή ενός αντικειμένου. Αυτό συνήθως καθιστά ευκολότερη την κίνηση αντικειμένων με τρόπο που έχει νόημα, καθώς ο τοπικός άξονας διαστήματος θα προσανατολιστεί και θα επικεντρωθεί στο γονικό αντικείμενο παρά στην παγκόσμια προέλευση και τις κατευθύνσεις x, y, z.

Εάν πρέπει να κάνετε μετατροπή μεταξύ τοπικού και παγκόσμιου χώρου (που συμβαίνει συχνά) μπορείτε να χρησιμοποιήσετε τα εξής:

Όπως μπορείτε να φανταστείτε, υπάρχει κάποια αρκετά απλή γραμμική άλγεβρα πίσω από αυτό που υποδηλώνεται από το «Αντίστροφο» στο όνομα της μεθόδου.

Δημιουργία νέων GameObjects

Δεδομένου ότι το GameObjects είναι βασικά τα πάντα στη σκηνή σας, ίσως θελήσετε να μπορείτε να τα δημιουργήσετε εν κινήσει. Για παράδειγμα, εάν η συσκευή αναπαραγωγής σας έχει κάποιο είδος εκτοξευτή βλήματος, ίσως θελήσετε να μπορείτε να δημιουργήσετε βλήματα εν κινήσει, τα οποία έχουν τη δική τους λογική για την πτήση, την αντιμετώπιση ζημιών κ.λπ.

Πρώτα πρέπει να εισαγάγουμε την έννοια του Prefab . Μπορούμε να τα δημιουργήσουμε απλά σύροντας οποιοδήποτε GameObject στην ιεραρχία σκηνής στο φάκελο aset.

Αυτό ουσιαστικά αποθηκεύει ένα πρότυπο του αντικειμένου που είχαμε στη σκηνή μας με όλες τις ίδιες διαμορφώσεις.

Μόλις έχουμε αυτά τα προκατασκευασμένα στοιχεία, μπορούμε να τα αντιστοιχίσουμε σε μεταβλητές επιθεωρητών (όπως μιλήσαμε νωρίτερα) σε οποιοδήποτε στοιχείο της σκηνής, έτσι ώστε να μπορούμε να δημιουργήσουμε νέα GameObjects όπως καθορίζονται από το πρόθεμα ανά πάσα στιγμή.

Μπορούμε στη συνέχεια να εκτελέσουμε «instantiation» του προκατασκευασμένου και να το χειριστούμε στην επιθυμητή τοποθεσία στη σκηνή και να δημιουργήσουμε τις απαραίτητες γονικές σχέσεις.

Πρόσβαση σε άλλα GameObjects και Components

Συχνά πρέπει να επικοινωνήσουμε με άλλα GameObjects καθώς και με τα αντίστοιχα συστατικά τους. Μόλις έχετε μια αναφορά σε ένα αντικείμενο παιχνιδιού, αυτό είναι πολύ απλό.

ComponentName comp = some_game_object.GetComponent ();

Μετά από αυτό μπορείτε να αποκτήσετε πρόσβαση σε οποιαδήποτε από τις δημόσιες μεθόδους / μεταβλητές του στοιχείου για να χειριστείτε το GameObject. Αυτό είναι το απλό κομμάτι, ωστόσο στην πραγματικότητα η λήψη της αναφοράς στο GameObject μπορεί να γίνει με διάφορους τρόπους…

Πρόσβαση μέσω μεταβλητής επιθεωρητή

Αυτό είναι το πιο απλό. Απλώς δημιουργήστε μια δημόσια μεταβλητή για το GameObject, όπως έχουμε δείξει νωρίτερα με τα πρόθετα, και σύρετε και αποθέστε τη με το χέρι στο στοιχείο μέσω του επιθεωρητή. Στη συνέχεια, αποκτήστε πρόσβαση στη μεταβλητή όπως παραπάνω.

Πρόσβαση μέσω προσθήκης ετικετών

Μπορούμε να επισημάνουμε το GameObjects ή τα prefabs μέσω του επιθεωρητή και στη συνέχεια να χρησιμοποιήσουμε τις λειτουργίες εύρεσης αντικειμένου παιχνιδιού για να εντοπίσουμε αναφορές σε αυτά.

Αυτό γίνεται απλά όπως παρακάτω.

GameObject some_game_object = GameObject.FindGameObjectWithTag ("Brick");

Πρόσβαση μέσω μετασχηματισμού

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

ComponentName comp = gameObject.transform.parent.GetComponent ();

Πρόσβαση μέσω SendMessage

Εναλλακτικά, εάν θέλουμε να στείλουμε ένα μήνυμα σε πολλά άλλα στοιχεία ή επιθυμούμε να στείλουμε ένα μήνυμα που είναι πολύ ένθετη ιεραρχία, μπορούμε να χρησιμοποιήσουμε τις λειτουργίες αποστολής μηνύματος, οι οποίες αποδέχονται το όνομα της συνάρτησης ακολουθούμενη από τα ορίσματα.

gameObject.SendMessage ("MethodName", παράμετροι); // Μετάδοση messagegameObject.SendMessageUpwards ("MethodName", params); // Λαμβάνεται μόνο από στοιχεία που είναι ένθετα παραπάνω.

Ραϊνστάινγκ

Μπορεί να το έχετε ακούσει πριν όταν οι άνθρωποι συγκρίνουν παιχνίδια FPS που βασίζονται στη φυσική ή στηρίζονται σε ακτίνες. Το Raycasting είναι ουσιαστικά σαν να έχει ένα δείκτη λέιζερ, ο οποίος, όταν έρχεται σε επαφή με ένα «collider» ή «rigidbody», επιστρέφει ένα «χτύπημα» και επιστρέφει τις λεπτομέρειες του αντικειμένου.

Υπάρχουν δύο σενάρια όπου αυτό είναι βολικό (Υπάρχει πιθανώς πολλά περισσότερα):

  1. Εάν σχεδιάζετε ένα οπλικό σύστημα για ένα παιχνίδι, θα μπορούσατε να χρησιμοποιήσετε την εκπομπή ακτίνων για την ανίχνευση χτυπήματος και ακόμη και να προσαρμόσετε το μήκος της ακτίνας έτσι ώστε τα αντικείμενα των γοητειών να «χτυπήσουν» μόνο σε μικρές αποστάσεις
  2. Δημιουργήστε μια ακτίνα από το δείκτη του ποντικιού σε ένα σημείο σε χώρο τρισδιάστατου, δηλαδή αν θέλετε ο χρήστης να μπορεί να επιλέξει μονάδες με το ποντίκι του σε ένα παιχνίδι στρατηγικής.

Όπως μπορείτε να δείτε, ο κώδικας για αυτό είναι λίγο πιο εμπλεκόμενος. Το βασικό πράγμα που πρέπει να καταλάβετε είναι ότι για να ρίξετε μια ακτίνα στο σημείο που δείχνει το ποντίκι σε τρισδιάστατο χώρο απαιτείται ο μετασχηματισμός ScreenPointToRay. Ο λόγος για αυτό είναι ότι η κάμερα αποδίδει έναν τρισδιάστατο χώρο ως μια 2η θύρα προβολής στην οθόνη του φορητού υπολογιστή σας, οπότε φυσικά υπάρχει μια προβολή που απαιτείται για μεταφορά πίσω στο τρισδιάστατο.

Ανίχνευση σύγκρουσης

Νωρίτερα αναφέραμε τα στοιχεία Collider και Rigidbody τα οποία μπορούν να προστεθούν σε ένα αντικείμενο. Ο κανόνας για τις συγκρούσεις είναι ότι το ένα αντικείμενο της σύγκρουσης πρέπει να έχει ένα άκαμπτο σώμα και το άλλο ένα συγκρότημα (ή και τα δύο έχουν και τα δύο συστατικά). Λάβετε υπόψη ότι όταν χρησιμοποιείτε ραδιοφωνική μετάδοση, οι ακτίνες αλληλεπιδρούν μόνο με αντικείμενα με συνδεδεμένα στοιχεία συγκολλητή.

Μόλις εγκατασταθεί σε οποιοδήποτε προσαρμοσμένο στοιχείο προσαρτημένο στο αντικείμενο, μπορούμε να χρησιμοποιήσουμε τις μεθόδους OnCollisionEnter, OnCollisionStay και OnCollisionExit για να ανταποκριθούμε σε συγκρούσεις. Μόλις έχουμε τις πληροφορίες σύγκρουσης, μπορούμε να πάρουμε το GameObject υπεύθυνο και να χρησιμοποιήσουμε αυτά που μάθαμε νωρίτερα για να αλληλεπιδράσουμε με εξαρτήματα που είναι επίσης συνδεδεμένα σε αυτό.

Ένα πράγμα που πρέπει να σημειωθεί είναι ότι τα άκαμπτα σώματα παρέχουν φυσική όπως η βαρύτητα για αντικείμενα, οπότε αν θέλετε να είναι απενεργοποιημένη, θα πρέπει να ελέγξετε το is_kinematic .

Προηγμένες δυνατότητες

Δεν θα το εξετάσουμε τώρα αλλά ίσως σε ένα μελλοντικό άρθρο - για να σας ενημερώσουμε ότι υπάρχουν.

Δημιουργία GUI

Το Unity διαθέτει έναν πλήρως εξοπλισμένο κινητήρα UI για την τοποθέτηση του GUI για το παιχνίδι σας. Γενικά, αυτά τα εξαρτήματα λειτουργούν αρκετά παρόμοια με τον υπόλοιπο κινητήρα.

Επέκταση του προγράμματος επεξεργασίας Unity

Το Unity σάς δίνει τη δυνατότητα να προσθέσετε προσαρμοσμένα κουμπιά στους επιθεωρητές σας, ώστε να μπορείτε να επηρεάσετε τον κόσμο κατά τη λειτουργία επεξεργασίας. Για παράδειγμα, για να βοηθήσετε στην οικοδόμηση του κόσμου, μπορείτε να αναπτύξετε ένα προσαρμοσμένο παράθυρο εργαλείων για την κατασκευή αρθρωτών σπιτιών.

Κινουμένων σχεδίων

Το Unity διαθέτει ένα σύστημα κινούμενων σχεδίων που βασίζεται σε γραφήματα, το οποίο σας επιτρέπει να συνδυάζετε και να ελέγχετε κινούμενες εικόνες σε διάφορα αντικείμενα, όπως οι παίκτες που εφαρμόζουν ένα σύστημα κινούμενων σχεδίων με βάση τα οστά.

Υλικά και PBR

Το Unity τρέχει έναν κινητήρα απόδοσης με φυσική βάση που επιτρέπει φωτισμό σε πραγματικό χρόνο και ρεαλιστικά υλικά. Η πραγματικότητα είναι είτε θα πρέπει πρώτα να μάθετε τρισδιάστατη μοντελοποίηση είτε να χρησιμοποιήσετε μοντέλα που έχουν φτιαχτεί και βελτιστοποιηθεί από κάποιον άλλο πριν φτάσετε σε αυτό, προκειμένου να φτιάξετε πράγματα που πραγματικά φαίνονται καλά.

Συμβουλές για νεοεισερχόμενους

Εάν σκοπεύετε να γράψετε το πρώτο σας παιχνίδι, μην υποτιμάτε την πολυπλοκότητα και το χρόνο που χρειάζεται για να γράψετε ακόμη και τα πιο ασήμαντα παιχνίδια. Θυμηθείτε ότι τα περισσότερα από τα παιχνίδια που βγαίνουν στο Steam έχουν ομάδες που εργάζονται για χρόνια με πλήρη απασχόληση!

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

Πριν πάτε και γράψτε οποιονδήποτε κώδικα για οποιοδήποτε μέρος του παιχνιδιού σας, πηγαίνετε και ερευνήστε τι έχει κάνει κάποιος άλλος πριν για να λύσει το ίδιο πρόβλημα - πιθανότατα θα έχουν μια πολύ πιο λεία λύση.

Ωραίοι πόροι και κοινότητες

Ο σχεδιασμός του παιχνιδιού έχει μια από τις καλύτερες κοινότητες όλων εκεί έξω, και υπάρχουν πολλά εξειδικευμένα επαγγελματίες στον κλάδο που βάζουν περιεχόμενο δωρεάν ή χωρίς τίποτα. Είναι ένας τομέας που απαιτεί 3d Modelers, Concept Artists, Game Designers, Programmers και ούτω καθεξής. Έχω συνδέσει μερικούς εξαιρετικούς γενικούς πόρους που έχω συναντήσει για καθένα από αυτά τα πεδία παρακάτω:

Έννοια τέχνης

  • Σχολή σχεδιασμού Feng Zhu (πάνω από 90 ώρες μαθήματα τέχνης έννοιας)
  • Tyler Edlin Art (Μεγάλη καλλιτεχνική κοινότητα BST με σχόλια από επαγγελματίες σχετικά με τις μηνιαίες προκλήσεις)
  • Art Cafe (Συνεντεύξεις και εργαστήρια με διάσημους καλλιτέχνες Concept)
  • Trent Kaniuga (Illustrator και 2D καλλιτέχνης που κάνει επίσης το δικό του παιχνίδι)

Τρισδιάστατη μοντελοποίηση

  • CG Cookie (Καλύτερα βασικά μοντέλα ματιών στο Blender Ever, έχουν πολλά άλλα εξαιρετικό περιεχόμενο για το μπλέντερ)
  • Tor Frick (Μοντελιστές σκληρών επιφανειών και γλύπτες στο μπλέντερ)
  • Gleb Alexandrov (Σύντομα ισχυρά μαθήματα απόδοσης στο Blender)

Σχεδιασμός παιχνιδιού

  • DoubleFine Amnesia Fortnight (GameDevs που κάνουν hackathon 2 εβδομάδων και καταγράφουν ολόκληρη τη διαδικασία σχεδίασης)
  • ToolMakers Toolkit (Εξετάζει τις αρχές σχεδιασμού παιχνιδιών)

Προγραμματισμός

  • Χειροποίητος Ήρωας (Γράφοντας ένα παιχνίδι και μια μηχανή από το μηδέν σε C)
  • Jonathan Blow (Indie dev που παρακολουθεί ζωντανά την ανάπτυξη του παιχνιδιού του)
  • Brackeys (ωραία μαθήματα ενότητας)

συμπέρασμα

Ελπίζω να σας άρεσε αυτό το σεμινάριο! Κάνω λίγο γραφιστική δουλειά, καθώς και πρωτότυπα παιχνιδιών και διεπαφών χρήστη, γι 'αυτό δείτε το χαρτοφυλάκιό μου ! Είμαι επίσης συνδεδεμένος στο .

Χαρτοφυλάκιο| LinkedIn