Oufis3 Δημοσ. 28 Σεπτεμβρίου 2017 Δημοσ. 28 Σεπτεμβρίου 2017 Καλησπερα αναγνωστες, Εχω ξεκινήσει ένα Project στο Unity 3D. Δημιουργώ ένα RPG παιχνίδι. Καθώς δημιουργούσα τους χαρακτήρες για τις κλασεις(Assasin,warrior,mage). Το προβλημα είναι οτι δεν έχω την παραμικρή ιδέα πως να κάνω το σύστημα να καταλάβει ποία κλάση έχει επιλέξει ο παίχτης. Ορίστε και μία εικονα με το πώς μοιαζει η αρχή που ο παιχτης θα καλείται να επιλέξει την κλάση. Οπότε το ερώτημα μου είναι πως θα κάνω τα κουμπία να αλλάξουν τον βασικό χαρακτήρα όταν έχουν πατηθεί.
Moderators Kercyn Δημοσ. 29 Σεπτεμβρίου 2017 Moderators Δημοσ. 29 Σεπτεμβρίου 2017 Έχεις μια μεταβλητή σε ένα prefab (είτε αυτό του παίκτη, είτε κάποιο άλλο που αποθηκεύεις πράγματα για το παιχνίδι) και την αλλάζεις αναλόγως του ποιο κουμπί θα πατήσει. Ή θα μπορούσες να έχεις ένα disabled prefab για κάθε κλάση και να κάνεις enable το κατάλληλο, αν και μου φαίνεται κακή αυτή η λύση. 1
Alithinos Δημοσ. 29 Σεπτεμβρίου 2017 Δημοσ. 29 Σεπτεμβρίου 2017 (επεξεργασμένο) Το πρόβλημα σου αφορά το να πάρεις το user input από την αλληλεπίδραση του παίκτη με το GUI,με το να αποθηκευτεί κάπου η επιλογή του παίκτη, ή το να ελεγχθεί η επιλογή του παίκτη ? Αν είναι το πρώτο, τότε στον Inspector όταν θα έχεις επιλεγμένο το GUI κουμπί, θα δεις ότι έχει ένα component τύπου Button(script). Θα πρέπει να έχεις γράψει τη μέθοδο που θες να εκτελείται όταν πατιέται το κουμπί ήδη. Στον inspector, θα βρεις ένα πλαίσιο, που δέχεται με drag n drop ένα script. Ρίξτου το script που περιέχει τη σχετική μέθοδο. Στη συνέχεια, έχει μια λίστα πολλαπλής επιλογής που θα φορτώσει τις μεθόδους του script, και θα διαλέξεις τη μέθοδο που θα εκτελείται στο OnClick event του κουμπιού. Αν είναι το δεύτερο, όπως είπε ο Kercyn θα αποθηκεύσεις τη πληροφορία της κλάσης του παίκτη σε μια μεταβλητή. Εφόσων οι κλάσεις είναι πάνω από 2, μια απλή bool δεν αρκεί, ίσως να είναι καλύτερα να είναι μια μεταβλητή τύπου enum. Στη συνέχεια, αν είναι το τρίτο και έχεις ήδη φτιάξει ένα enum, γράφεις το κώδικα που ελέγχει τη τιμή της μεταβλητής, και ανάλογα τη τιμή, κάνει και διαφορετικά πράγματα ανάλογα τη περίπτωση. Θα μπορούσες να το κάνεις κάπως έτσι πχ: (C#) private void ApplyClassSpecifics(GameObject player) { switch(player.GetComponent(PlayerStats).class) { case PlayerClass.Assassin: player.GetComponent(PlayerStats).Damage += 10; break; case PlayerClass.Mage: player.GetComponent(PlayerStats).HitDistance += x; break; case PlayerClass.Warrior: player.GetComponent(PlayerStats).Health += 100; break; } } Υ.Γ. Άμα δεν είσαι εξοικειωμένος με enums, switch, events κτλπ, χρειάζεται περισσότερη μελέτη της γλώσσας προγραμματισμού πριν συνεχίσεις. Επεξ/σία 29 Σεπτεμβρίου 2017 από Alithinos
Oufis3 Δημοσ. 29 Σεπτεμβρίου 2017 Μέλος Δημοσ. 29 Σεπτεμβρίου 2017 Το πρόβλημα σου αφορά το να πάρεις το user input από την αλληλεπίδραση του παίκτη με το GUI,με το να αποθηκευτεί κάπου η επιλογή του παίκτη, ή το να ελεγχθεί η επιλογή του παίκτη ? Αν είναι το πρώτο, τότε στον Inspector όταν θα έχεις επιλεγμένο το GUI κουμπί, θα δεις ότι έχει ένα component τύπου Button(script). Θα πρέπει να έχεις γράψει τη μέθοδο που θες να εκτελείται όταν πατιέται το κουμπί ήδη. Στον inspector, θα βρεις ένα πλαίσιο, που δέχεται με drag n drop ένα script. Ρίξτου το script που περιέχει τη σχετική μέθοδο. Στη συνέχεια, έχει μια λίστα πολλαπλής επιλογής που θα φορτώσει τις μεθόδους του script, και θα διαλέξεις τη μέθοδο που θα εκτελείται στο OnClick event του κουμπιού. Αν είναι το δεύτερο, όπως είπε ο Kercyn θα αποθηκεύσεις τη πληροφορία της κλάσης του παίκτη σε μια μεταβλητή. Εφόσων οι κλάσεις είναι πάνω από 2, μια απλή bool δεν αρκεί, ίσως να είναι καλύτερα να είναι μια μεταβλητή τύπου enum. Στη συνέχεια, αν είναι το τρίτο και έχεις ήδη φτιάξει ένα enum, γράφεις το κώδικα που ελέγχει τη τιμή της μεταβλητής, και ανάλογα τη τιμή, κάνει και διαφορετικά πράγματα ανάλογα τη περίπτωση. Θα μπορούσες να το κάνεις κάπως έτσι πχ: (C#) private void ApplyClassSpecifics(GameObject player) { switch(player.GetComponent(PlayerStats).class) { case PlayerClass.Assassin: player.GetComponent(PlayerStats).Damage += 10; break; case PlayerClass.Mage: player.GetComponent(PlayerStats).HitDistance += x; break; case PlayerClass.Warrior: player.GetComponent(PlayerStats).Health += 100; break; } } Υ.Γ. Άμα δεν είσαι εξοικειωμένος με enums, switch, events κτλπ, χρειάζεται περισσότερη μελέτη της γλώσσας προγραμματισμού πριν συνεχίσεις. είμαι αρκετα εξοικειωμένος το θέμα είναι οτι θέλω να το κάνω με το button property
Alithinos Δημοσ. 1 Οκτωβρίου 2017 Δημοσ. 1 Οκτωβρίου 2017 είμαι αρκετα εξοικειωμένος το θέμα είναι οτι θέλω να το κάνω με το button property Όταν λες button property ? Είναι κάποιο property που έχεις φτιάξει εσύ ? Αν είναι έτσι, πες μας 1-2 πραγματάκια για αυτό, για να μπορέσουμε να σε βοηθήσουμε. Δε μπορούμε να ξέρουμε από πριν τι έχεις φτιάξει. Αν εννοείς το button component του API, τότε 2 τεινά υπάρχουν: 1. Θέλεις η επιλογή του παίκτη να αποθηκευτεί κάπου για να χρησιμοποιηθεί ξανά αργότερα. 2. Η επιλογή του παίκτη είναι χρήσιμη μόνο για εκείνη τη στιγμή. 1: Στη περίπτωση του 1 θα χρειαστείς κάποιο enum ή κάτι παρόμοιο. Γιατί δεν έχεις ένα button αλλά 3, ένα για κάθε κλάση του χαρακτήρα. Το κάθε button ξέρει μόνο για τον εαυτό του, όχι το τι κάνουν τα άλλα buttons. Άρα θα πρέπει να υπάρχει κάποια μεταβλητή η οποία θα εξυπηρετεί στο να περιέχει τη πληροφορία του ποιου button πατήθηκε, και ένας τρόπος για να ανατίθεται η κατάλληλη τιμή σε αυτή τη μεταβλητή ανάλογα το button που πατήθηκε. Ο τρόπος με τα 3 βήματα που περιέγραψα παραπάνω (ανάθεση event handler στα κουμπιά, ο οποίος δίνει μια τιμή σε μια μεταβλητή ανάλογα το κουμπί, και έλεγχος της μεταβλητής) είναι ένας συνηθισμένος τρόπος να κάνεις κάτι τέτοιο. 2: Αν δεν σε ενδιαφέρει το να διατηρήσεις τη πληροφορία του ποια κλάση διάλεξε ο παίκτης μακροπρόθεσμα, θα μπορούσες να παρακάμψεις την ανάθεση της επιλογής σε μεταβλητή, και να φτιάξεις event handlers για τα κουμπιά, που θα κάνουν απ' ευθείας τη πράξη, όπως πχ το να ανεβάσουν το health 100 πόντους. ! Το Βutton του API σου παρέχει ένα event το οποίο ενεργοποιείται όταν το κουμπί κλικαριστεί. Με αυτό θα δουλέψεις.
Oufis3 Δημοσ. 1 Οκτωβρίου 2017 Μέλος Δημοσ. 1 Οκτωβρίου 2017 Αγαπητε φίλε, πάνω σε αυτό προσπαθώ να δουλέψω. Κατάφερα να το κάνω να κάνει αόρατα τα prefabs, το προβλημα είναι οτι τον χαρακτηρα δεν το κάνει αόρατο.ΑΡΑ το ερώτημα είναι, Αν ο παίχτης διαλέξει μία κλάση να φαίνεται μόνο αυτή στο παιχνίδι, οι άλλες δυό να εξαφανίζονται.
Alithinos Δημοσ. 2 Οκτωβρίου 2017 Δημοσ. 2 Οκτωβρίου 2017 Όπα, τώρα αναφέρεις πρώτη φορά ότι θέλεις κάτι αόρατο. Στο πρώτο σου μήνυμα δεν ανέφερες κάτι σχετικό. Όταν λες να εξαφανίζονται οι κλάσεις, τι εννοείς; Να σβήνουν τα gui κουμπιά επιλογής κλασεως απ την οθόνη; έχεις φτιάξει καποιο sprite για τη κάθε κλάση και εμφανίζονται όλα μαζί και θέλεις να απομείνει ένα; Να σταματήσουν να εμφανίζονται τα ονόματα των άλλων κλάσεων κάπου; Προσπάθησε να μας βοηθησεις και εμάς που δεν είμαστε μέσα στο κεφάλι σου, και δε δουλεύουμε στο ίδιο παιχνίδι, να καταλάβουμε τι εννοείς με το να γίνεις πιο συγκεκριμένος και λεπτομερής.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα