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

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

Δημοσ.

Καλησπερα αναγνωστες,

 

Εχω ξεκινήσει ένα Project στο Unity 3D. Δημιουργώ ένα RPG παιχνίδι. Καθώς δημιουργούσα τους χαρακτήρες για τις κλασεις(Assasin,warrior,mage). Το προβλημα είναι οτι δεν έχω την παραμικρή ιδέα πως να κάνω το σύστημα να καταλάβει ποία κλάση έχει επιλέξει ο παίχτης. Ορίστε και μία εικονα με το πώς μοιαζει η αρχή που ο παιχτης θα καλείται να επιλέξει την κλάση. Οπότε το ερώτημα μου είναι πως θα κάνω τα κουμπία να αλλάξουν τον βασικό χαρακτήρα όταν έχουν πατηθεί.

post-434176-0-43202500-1506628513_thumb.jpg

  • Moderators
Δημοσ.

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

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

Το πρόβλημα σου αφορά το να πάρεις το user input από την αλληλεπίδραση του παίκτη με το GUI,με το να αποθηκευτεί κάπου η επιλογή του παίκτη, ή το να ελεγχθεί η επιλογή του παίκτη ?

 

Αν είναι το πρώτο, τότε στον Inspector όταν θα έχεις επιλεγμένο το GUI κουμπί, θα δεις ότι έχει ένα component τύπου Button(script). Θα πρέπει να έχεις γράψει τη μέθοδο που θες να εκτελείται όταν πατιέται το κουμπί ήδη. Στον inspector, θα βρεις ένα πλαίσιο, που δέχεται με drag n drop ένα script. Ρίξτου το script που περιέχει τη σχετική μέθοδο. Στη συνέχεια, έχει μια λίστα πολλαπλής επιλογής που θα φορτώσει τις μεθόδους του script, και θα διαλέξεις τη μέθοδο που θα εκτελείται στο OnClick event του κουμπιού. 

 

QlGPVlf.png

 

Αν είναι το δεύτερο, όπως είπε ο 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 κτλπ, χρειάζεται περισσότερη μελέτη της γλώσσας προγραμματισμού πριν συνεχίσεις.

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

Το πρόβλημα σου αφορά το να πάρεις το user input από την αλληλεπίδραση του παίκτη με το GUI,με το να αποθηκευτεί κάπου η επιλογή του παίκτη, ή το να ελεγχθεί η επιλογή του παίκτη ?

 

Αν είναι το πρώτο, τότε στον Inspector όταν θα έχεις επιλεγμένο το GUI κουμπί, θα δεις ότι έχει ένα component τύπου Button(script). Θα πρέπει να έχεις γράψει τη μέθοδο που θες να εκτελείται όταν πατιέται το κουμπί ήδη. Στον inspector, θα βρεις ένα πλαίσιο, που δέχεται με drag n drop ένα script. Ρίξτου το script που περιέχει τη σχετική μέθοδο. Στη συνέχεια, έχει μια λίστα πολλαπλής επιλογής που θα φορτώσει τις μεθόδους του script, και θα διαλέξεις τη μέθοδο που θα εκτελείται στο OnClick event του κουμπιού. 

 

QlGPVlf.png

 

Αν είναι το δεύτερο, όπως είπε ο 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

Δημοσ.

είμαι αρκετα εξοικειωμένος το θέμα είναι οτι θέλω να το κάνω με το 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 το οποίο ενεργοποιείται όταν το κουμπί κλικαριστεί. Με αυτό θα δουλέψεις.

Δημοσ.

Αγαπητε φίλε,

 

πάνω σε αυτό προσπαθώ να δουλέψω.

Κατάφερα να το κάνω να κάνει αόρατα τα prefabs, το προβλημα είναι οτι τον χαρακτηρα δεν το κάνει αόρατο.
ΑΡΑ το ερώτημα είναι, Αν ο παίχτης διαλέξει μία κλάση να φαίνεται μόνο αυτή στο παιχνίδι, οι άλλες δυό να εξαφανίζονται.

Δημοσ.

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

 

Όταν λες να εξαφανίζονται οι κλάσεις, τι εννοείς; Να σβήνουν τα gui κουμπιά επιλογής κλασεως απ την οθόνη; έχεις φτιάξει καποιο sprite για τη κάθε κλάση και εμφανίζονται όλα μαζί και θέλεις να απομείνει ένα; Να σταματήσουν να εμφανίζονται τα ονόματα των άλλων κλάσεων κάπου;

 

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

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

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

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

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

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

Σύνδεση

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

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