Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Εμφανίστηκε ένα πρόβλημα που κοντεύει να με τρελάνει.

Λοιπόν έγραφα κάποιο νέο κώδικα, έκανα build το solution στο Visual Studio (C#), και επέστρεψα στη Unity. Μπαίνω σε Play mode να δοκιμάσω τη νέα λειτουργία που μόλις έβαλα, αλλά ξαφνικά σταμάτησαν οι εχθροί να κάνουν ζημιά στο παίκτη μου! Ο κώδικας που προσέθεσα αυτή τη τελευταία φορά δεν είχε καμία σχέση. Και για να είμαι 110% σίγουρος, επέστρεψα τα scripts στη προηγούμενή τους κατάσταση μέσω του git, και το πρόβλημα παραμένει. Εκεί ήταν που μου ήρθε το πρώτο σοκ.

Άρχισα λοιπόν να ψάχνω με debugging να βρω το πρόβλημα, και ύστερα από μερικές ωρίτσες συνειδητοποίησα ότι συμβαίνει κάτι πολύ παράξενο. Πριν όμως σας πω για το παράξενο, θα δώσω μια σύντομη περιγραφή για το πως λειτουργεί το σχετικό σύστημα. Ο κάθε εχθρός κρατάει ένα όπλο. Το κάθε όπλο έχει ένα collider, το οποίο γενικά λειτουργεί ως συνηθισμένο collider, αλλά όταν κάποιος κάνει επίθεση με αυτό, μετατρέπεται σε trigger για τα δευτερόλεπτα που κρατά το animation επίθεσης. Επίσης ο κώδικας ενεργοποιεί μια bool η οποία δείχνει ότι ο εχθρός κάνει επίθεση, ώστε ο παίκτης να μη χάνει ζωή όταν απλά ακουμπά το όπλο αλλά μόνο όταν κάποιος κάνει επίθεση με το όπλο.

Έτσι η μέθοδος επίθεσης:

1) Κάνει το collider να είναι trigger.

2) Κάνει μια bool true.

3) Πυροδοτεί το animation επίθεσης.

Φυσικά υπάρχει το event handler OnTriggerEnter, όπου αν το trigger του όπλου χτυπήσει το παίκτη και η bool είναι true, κάνει ζημιά στο παίκτη.

Το παραπάνω σύστημα λειτουργούσε καλά μέχρι χθες που συνεύει... το παράξενο. Κάνοντας λοιπόν debugging και πηγαινοερχόμενος μεταξύ Visual Studio και Unity, ανακάλυψα το εξής: Στο VS, στο step-by-step debugging, η εκτέλεση περνά κανονικά απ' τις παραπάνω γραμμές και συνεχίζει χωρίς κανένα error, και βλέπω βάζοντας το δείκτη ποντικιού πάνω από τις μεταβλητές πως και ο collider έχει γίνει trigger, και η bool είναι true. Στη Unity όμως ο collider είναι πάντα ΜΗ-trigger, και η bool πάντα false! Δεν έχει λογική αυτό.

Τι γίνεται ; Που έφταιξα αφού και γυρνόντας το κώδικα στη προηγούμενη κατάσταση του στην οποία δεν υπήρχε, το πρόβλημα παραμένει ; Χρειάζεται οπωσδήποτε να λυθεί το πρόβλημα. Έχω ήδη επενδύσει 7 μήνες εργασίας σε αυτό το project. :(

Επεξ/σία από Alithinos
Δημοσ.

Χωρίς να ξέρω απο visual studio και unity πιθανολογώ οτι το προβλημα είναι κάπου στη γέφυρα ανάμεσα στο vs και την unity engine. Πως ακριβώς επικοινωνούν μέσω tcp socket π.χ, μέσω file descriptor ίσως, κάπου δεν έγινε μάλλον commit το transaction όταν ήταν ανοιχτό το socket.

  • Like 1
Δημοσ. (επεξεργασμένο)

Ευχαριστώ πολύ για την απάντηση, και εγώ κάτι τέτοιο σκέφτηκα. Έκανα update και επανεγκατάσταση και τα 2, δε λύθηκε το πρόβλημα και επέστρεψα ξανά στο να ψάχνω. Τελικά το πρόβλημα λύθηκε.

Αυτό που με έκανε να σπάω το κεφάλι μου ήταν η ιδιοτροπία της Unity που ανακάλυψα χθες, ότι επιτρέπει να υπάρχουν 2 αντικείμενα με το ίδιο όνομα στην ίδια scene / πίστα. Και ότι δίνει από μόνη της, αυτόματα, ξεχωριστά μοναδικά ονόματα στα αντικείμενα μονάχα στη περίπτωση όπου τα αντικείμενα είναι children του ίδιου parent. Γνωρίζοντας αυτή την ιδιοτροπία, το τι μπορεί να συμβεί είναι προβλεπόμενο, πλέον.  Οι περισσότεροι πιστεύω έχουμε συνηθίσει από το προγραμματισμό πως δεν επιτρέπεται να υπάρχουν δύο αντικείμενα με το ίδιο όνομα, στο ίδιο περιβάλλον. Και άμα πας να βάλεις 2 αντικείμενα και τύχει να είναι στο ίδιο parent (που τις περισσότερες φορές είναι) βλέπεις να αλλάζει αυτόματα τα ονόματα, και επειδή έχεις συνηθίσει να το θεωρείς λογικό, πιστεύεις ότι έτσι θα κάνει γενικά. Υπήρχαν όμως 2 αντικείμενα με το ίδιο ακριβώς όνομα, στο ίδιο scene αλλά children διαφορετικών parents και το αποτέλεσμα ήταν... Άλλο σπαθί να κάνει το animation και άλλο να γίνεται trigger και η bool του true. Ο εχθρός με βάραγε με το ένα σπαθί, αλλά το σπαθί το οποίο εκείνη τη στιγμή θα έκανε ζημιά αν το ακούμπαγα ήταν ένα άλλο random σπαθί κάπου στη πίστα. :shock: Επίσης, οι αλλαγές που κάνεις στο Unity editor δεν σώζονται στο git. Δε μπορεί να κρατηθεί ιστορικό για αυτές.

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

Επεξ/σία από Alithinos

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...