Δείτε στο νέο μας Βίντεο: «ΠΩΣ να αντέξεις τέτοια ΞΕΝΕΡΑ σε τέτοιο παιχνίδι | Game Recap #160»

Φτιάχνοντας το πρώτο μου παιχνίδι

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

Σίγουρα πολλοί θα αναρωτηθείτε, τι σχέση έχουνε όλα όσα έγραψα παραπάνω αλλά είχα μία εμπειρία πρόσφατα και θέλω να μοιραστώ μαζί σας. Κι εγώ, σαν και τους περισσότερους από εσάς, ασχολούμαι χρόνια με τον συγκεκριμένο χώρο. Μάλιστα είχα την τύχη να ξεκινήσω απο την ηλικία των τριών ή τεσσάρων ετών, με ένα Game Boy και Tetris. Έπρεπε να περάσουνε πολλά χρόνια για να αρχίσω να κατανοώ τι υπήρχε πίσω απο αυτά τα γκρί τουβλάκια που έβλεπα, πόσο μάλλον όσο περνούσανε τα χρόνια και οι τίτλοι άρχισαν να γίνονται όλο και πιο εξελιγμένοι και περίπλοκοι. Και αυτή τη βαθύτερη ματιά, την απόκτησα και βίωσα μέσα απο τη σχολή και την Unity Engine.

unity-logo

Το παιχνίδι στο οποίο εργάστηκα το περασμένο σχολικό εξάμηνο, αναπτύχθηκε με τη δωρεάν έκδοση της Unity Engine (κάποια απο τα παιχνίδια στα οποία χρησιμοποιήθηκε είναι τα ReCore, Escape Plan, Deus Ex: The Fall, Gone Home καθώς και σε πολλά mobile games). Ο λόγος που χρησιμοποιήθηκε η συγκεκριμένη μηχανή και όχι κάποια άλλη, πχ Unreal Engine, είναι η ευκολία στο να μάθει κανείς τα βασικές λειτουργίες και χρήση/αξιοποίηση της μηχανής, όπως το περιβάλλον διεπαφής χρήστη (User Interface), ταξινόμηση και κατηγοριοποίηση assets και αντικειμένων της σκηνής/παιχνιδιού, καθώς και επεξεργασία των ιδιοτήτων των αντικειμένων που χρησιμοποιούμε στο παιχνίδι μας.

Ο σκοπός του παιχνιδιού ηταν πολύ απλός: ο παίκτης ελέγχει μια μπάλα και προσπαθεί να φτάσει το όριο των πόντων που έχουνε τεθεί σε κάθε επίπεδο παίρνοντας κάποια pickup αντικείμενα, προσπαθώντας παράλληλα να αποφύγει τους εχθρούς που υπάρχουν σε κάθε επίπεδο. Φυσικά οι εχθροί δεν σε “σκοτώνουν” μονομιάς, αλλά προκαλούνε ζημιά (damage) στον παίκτη με κάθε επαφή. Πάρα πολύ απλό, σωστά; Η υλοποίηση όμως απέχει πάρα πολύ απο την πραγματικότητα, ειδικά για κάποιον που ασχολείται πρώτη φορά με ένα τέτοιο εργαλείο.

Συνολική εικόνα της Unity Engine

unity_ui_full

Για την εξεταστική του εξαμήνου, μας ζητήθηκε να σχεδιάσουμε (μέσω 3DS Max) δύο pickup αντικείμενα που θα δίνουν πόντους στον παίκτη (ένα κοινό χαμηλότερων πόντων και ένα πιο δυσεύρετο υψηλότερων πόντων) και ένα life αντικείμενο που θα δίνει στον παίκτη +1 ζωή για το τρέχον επίπεδο. Προσωπικά σχεδίασα και αντίπαλο, που αν και όχι τόσο πετυχημένος, μου άρεσε και το κράτησα για να το χρησιμοποιήσω στο παιχνίδι μου.

Επίσης, μας ζητήθηκαν δύο επίπεδα, ένα πολύ βασικό και εύκολο το οποίο λειτουργεί ως tutorial, με εύκολο layout, ελάχιστα pickup αντικείμενα και ακόμη λιγότερους εχθρούς, για να βάλουμε τον παίκτη στο κλίμα, σκοπό και νόημα του παιχνιδιού. Το δεύτερο επίπεδο έπρεπε να είναι ελαφρώς δυσκολότερο, μεγαλύτερο και με όλα τα αντικείμενα που δίνουν πόντους καθώς και περισσότερους αντιπάλους. Προσωπικά έκανα και ένα τρίτο επίπεδο που ηταν προαιρετικό (και βλέπετε παραπάνω), όπου άλλαξα εν μέρη τον τρόπο και είδος του παιχνιδιού, έβαλα περισσότερα εμπόδια και αρκετές παγίδες (όπου κόκκινο = insta-death), δύο με τρία μονοπάτια για τον παίκτη με διαφορετικά αντικείμενα στην κάθε επιλογή του παίκτη, γρηγορότερους αντιπάλους που κάνουν περισσότερη ζημιά, και φυσικά αρκετές ζωές! Και ναί, δυσκολεύτηκα πάρα πολύ για να τερματίσω ο ίδιος..

Το δεύτερο επίπεδο του παιχνιδιού

lv2

Πέρα απο τον σχεδιασμό των επιπέδων και αντικειμένων, χρειάστηκε να στήσουμε και ένα User Interface απ’ όπου ο παίκτης γνωρίζει τους πόντους που έχει συλλέξει και πόσοι ακόμη εκκρεμούν για να περάσει το επίπεδο, πόσες ζωές έχει καθώς και πόση ζωή έχει. Επίσης, φτιάξαμε και δύο διαφορετικά μενού με δύο επιλογές/κουμπιά το κάθε ένα: ένα για όταν νικάς το επίπεδο και σου δίνεται η επιλογή να πάς στο επόμενο επίπεδο ή να κλείσεις το παιχνίδι, κι ένα για όταν χάνεις και μπορείς να ξαναπαίξεις το επίπεδο ή να κλείσεις το παιχνίδι πάλι. Ακούγονται αρκετά απλά, αλλά κρύβεται αρκετός κώδικας απο πίσω, συγκεκριμένα σε C#, και ευτυχώς τα script μας τα έδωσε έτοιμα ο καθηγητής μας (με άλλα λόγια, μας έσωσε σίγουρα απο 3-4+ ώρες επιπλέον σπαζοκεφαλιάς!).

Πέρα απο αυτό, χρειάστηκε να βρούμε μουσική και ηχιτικά εφέ που να “δένουν” με το είδος του παιχνιδιού. Κάτι ακόμη που κάναμε, ηταν εφέ (particle system) για όταν χάνει ο παίκτης μας ή παίρνουμε τα pickup αντικείμενα. Συγκεκριμένα, βάλαμε να “ανατινάζεται” και να βγαίνει το αντίστοιχο αντικείμενο σε μικρότερη κλίμακα και να εξαφανίζεται.

Και φυσικά, αφού τα στήσεις όλα και σιγουρέψεις οτι τρέχει η σκηνή που έχεις αποθηκεύσει (το επίπεδο ουσιαστικά), έρχεται η ώρα να τεστάρεις αν ότι έχεις βάλει στο επίπεδο λειτουργεί και μπορείς να το πάρεις (αν πρόκειται για αντικείμενο) και αν μπορείς να το ξεπεράσεις (αν πρόκειται για εμπόδιο) και φυσικά αν μπορείς να το ολοκληρώσεις!

Το τρίτο επίπεδο του παιχνιδιού

lv3

Προσωπικά έφαγα αρκετές ώρες να γεμίσω το τρίτο και τελυταίο επίπεδο με διάφορα αντικείμενα και εμπόδια, προσπαθώντας όσο μπορώ να δημιουργώ παραλλαγές και να μην επαναλαμβάνονται τόσο πολύ οτι προϋπήρχε. Απο ράμπες, σε άλματα πάνω απο death zones, τοίχους, τουβλάκια LEGO, ήθελα να υπάρχει ποικιλία και ελπίζω να τα κατάφερα.

Αλλο τόσο όμως χρειάστηκα για να τεστάρω το επίπεδο. Αν όλα τα αντικείμενα που έχω βάλει σε ύπουλα σημεία μπορείς τα πάρεις χωρίς να χάσεις. Αν όντως είναι εφικτό να το τερματίσεις χωρίς να χάσεις και αν όντως αρκούν τα αντικείμενα πόντων που έχω βάλει για να ολοκληρώσει ο παίκτης το τελευταίο επίπεδο. Και ήμουν πολύ χαρούμενος όταν μετά απο άλλες 2-3 ώρες τεσταρίσματος, όλα δούλευαν όπως θα έπρεπε. Συνολικά, μιλάμε για δουλειά περίπου 25-30 ωρών (και επαναλαμβάνω με τα script έτοιμα και χωρίς να περάσουμε textures στα αντικείμενα). Και όλα αυτά υπό μια μικρή πίεση, καθώς δεν ηταν το μοναδικό μάθημα που εκκρεμούσε για εξεταστική.

Φτάνοντας στο τέλος, δεν ξέρω πώς ακριβώς να αξιολογήσω μια τέτοια πρώτη εμπειρία σε αυτό το τομέα. Η αλήθεια είναι πως ένιωθα μια ασυνήθιστη χαρά οταν επιτέλους κατάφερα και τερμάτισα το παιχνίδι μου. Μετά απο 20+ χρόνια gamer, είμαι σε θέση να κάνω κάτι, έστω κατι τόσο απλό και να πώ πως είναι δικό μου. Ελπίζω να βρήκατε το παρόν αφιέρωμα ενδιαφέρον και να σας έδωσε μια κάπως βαθύτερη ματιά του τι κρύβεται πίσω απο αυτό που βλέπουμε στην οθόνη μας.


Κλείνοντας, θέλω να ευχαριστήσω τον καθηγητή μου στα μαθήματα σχεδιασμού και ανάπτυξης βιντεοπαιχνιδιών (3DS Max, Unity Engine), Σταυρίδη Χρήστο, για όλα όσα μου έμαθε μέσα σε τόσους λίγους μήνες και σε τόσα λίγα μαθήματα, την προσπάθεια και κόπο που καταβάλει για να μας διδάξει αλλά και την όρεξη που έχει στο να μοιράσει τις γνώσεις του μαζί μας! Thank You!

try-not

 

Μην μένεις σιωπηλός, σχολίασε και πες την άποψή σου ακριβώς παρακάτω!