Υποστήριξη Scripting

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

Δημιουργία αντικειμένου 3D χαρακτήρα και βασικές μέθοδοι

Για να φορτώσετε έναν 3D χαρακτήρα χρησιμοποιήστε την μέθοδο Game.LoadActor3D() ή την Scene.LoadActor3D(). Δουλεύουν με τον ίδιο τρόπο με την LoadActor(). Αυτές οι μέθοδοι δημιουργούν ένα καινούργιο αντικείμενο 3D χαρακτήρα που παρέχει ένα σύνολο από μεθόδους και ιδιότητες που είναι σχεδόν ίδιο με αυτές των δισδιάστατων χαρακτήρων. Εκτός από την γνωστή μέθοδο TurnTo() που γυρίζει τον χαρακτήρα προς μία από τις οκτώ κατευθύνσεις, οι 3D χαρακτήρες παρέχουν επίσης την μέθοδο TurnToAngle()  που μπορεί να στρέψει τον χαρακτήρα προς οποιαδήποτε γωνία.

Animations

Τα animations δουλεύουν εντελώς διαφορετικά από τους δισδιάστατους χαρακτήρες. Αντί για πολλά αρχεία, όλα τα animations είναι τμήμα των αρχείων με τα μοντέλα ενώ αναφέρονται στα αρχεία προσδιορισμού των 3D χαρακτήρων. Η μέθοδος PlayAnim() δέχεται μόνο το όνομα του animation. Επιπλέον μπορείτε να παίξετε πολλά animations μαζί. Κάθε ένα από αυτά επηρεάζει μόνο ορισμένα κόκαλα οπότε μπορείτε να συνδυάσετε πολλά animations σε ένα. Για παράδειγμα ο χαρακτήρας μπορεί να κάνει κάποια κίνηση με τα χέρια του ενώ περπατάει. (το animation των χεριών επηρεάζει μόνο τα κόκαλα των χεριών οπότε ουσιαστικά υπερκαλύπτει το animation του περπατήματος). Για να το επιτύχετε αυτό χρησιμοποιήστε την μέθοδο PlayAnimChannel(). Διατίθενται 10 ανεξάρτητα κανάλια για το animation, με τα νούμερα από 0 εώς 9. Το κανάλι 0 χρησιμοποιείται από την μηχανή για τα συνηθισμένα animations όπως το περπάτημα, η ομιλία και όταν χαρακτήρας μένει στάσιμος.

Η μηχανή αναγνωρίζει αυτά τα συνηθισμένα animations από το όνομά τους που σημαίνει ότι το αρχείο προσδιορισμού πρέπει να περιέχει animations με τα ονόματα "walk", "talk" και "idle" αντίστοιχα. Μπορείτε να αλλάξετε αυτά τα ονόματα χρησιμοποιώντας τις ιδιότητες  WalkAnimName, IdleAnimName και TalkAnimName. Που χρησιμεύει αυτό όμως; Για παράδειγμα αν θέλετε προσωρινά να αλλάξετε το περπάτημα με τρέξιμο ορίστε το WalkAnimName σε "run" και ο χαρακτήρας θα χρησιμοποιήσει αυτό το animation για περπάτημα (εφόσον βεβαίως ένα animation με αυτό το όνομα υπάρχει).

Είναι δυνατό να φορτώσετε καινούρια animations κατά τη διάρκεια του παιχνιδιού. Οι 3D χαρακτήρες μπορούν να δεχτούν τη μέθοδο MergeAnims() που διαβάζει animations από ένα εξωτερικό μοντέλο X. Αν χρειάζεται να ορίσετε επιπλέον ρυθμίσεις για τα animation (αν θα επαναλαμβάνονται ή διάφορα γεγονότα) θα πρέπει να φτιάξετε ένα αρχείο προσδιορισμού για το μοντέλο X. Για παράδειγμα, ας υποθέσουμε ότι θέλετε να φορτώσετε από το αρχείο "trinity_throw.x" το animation "throw". Για να ορίσετε τις ιδιότητες του animation δημιουργήστε ένα αρχείο στον ίδιο φάκελο με το μοντέλο με το όνομα "trinity_throw.anim". Το αρχείο προσδιορισμού θα περιέχει ένα η περισσότερα τμήματα ANIMATION με την ίδια σύνταξη που έχει το αρχείο προσδιορισμού 3D χαρακτήρα. Η WME αυτόματα θα χρησιμοποιήσει το αρχείο trinity_throw.anim όταν φορτώσει το μοντέλο trinity_throw.x.

Με τη μέθοδο UnloadAnim() μπορείτε να απελευθερώσετε από τη μνήμη ένα animation όταν αυτό δεν χρειάζεται.

Μοντέλα προσάρτησης

Η WME σας επιτρέπει να προσκολλήσετε στους 3D χαρακτήρες άλλα 3D μοντέλα, δυνατότητα που είναι χρήσιμη σε πολλές περιπτώσεις. Όπως όταν ο χαρακτήρας σας  κρατάει ένα αντικείμενο ή αν θέλετε να του φορέσετε ένα καπέλο κλπ. Τα μοντέλα προσάρτησεις μπορούν να προσκολληθούν και να αφαιρεθούν με τις μεθόδους  AddAttachment() και RemoveAttachment() αντίστοιχα. Η μέθοδος GetAttachment() επιστρέφει αναφορά στα μοντέλα προσάρτησης, αντικείμενο που μπορεί να δεχθεί τις δικές του μεθόδους και να ρυθμιστούν οι ιδιότητές του.

Άμεσος έλεγχος

Εκτός από το βασικό σύστημα χειρισμού με το ποντίκι, η WME παρέχει επίσης και ένα σύνολο μεθόδων για άμεσο έλεγχο των 3D χαρακτήρων από το πληκτρολόγιο. Αυτές είναι οι DirectWalk(), DirectWalkBack(), DirectWalkStop(), DirectTurnLeft(), DirectTurnRight() και DirectTurnStop(). Στο 3D παιχνίδι επίδειξης της WME μπορείτε να βρείτε ένα script που παρουσιάζει τη χρήση αυτών (scripts\direct_control.script).

Υπάρχουν περισσότερες μέθοδοι διαθέσιμες για τους 3D χαρακτήρες. Δείτε τον Οδηγό αναφοράς για τη γλώσσα προγραμματισμού για περισσότερες λεπτομέρειες.

Υφές

Μπορείτε να αλλάξετε τις υφές των μοντέλων κατά τη διάρκεια του παιχνιδιού με τη μέθοδο SetTexture(). Καθώς το μοντέλο σας μπορεί να έχει πολλές υφές θα πρέπει να ορίσετε ποια θέλετε να αλλάξετε δίνοντας το όνομα του υλικού. Τα ονόματα αυτά προέρχονται από τα ονόματα των αρχείων των αρχικών υφών, χωρίς την κατάληξη. Για παράδειγμα, αν ορίσετε την υφή  "path\some_texture.png" στο πρόγραμμα 3D, θα την καλέσετε με το όνομα "some_texture".

Η νέα υφή μπορεί να είναι είτε μία στατική εικόνα είτε ένα sprite, που σημαίνει ότι μπορείτε να έχετε και animated υφές. Πρέπει να σημειωθεί ότι μόνο οι εικόνες και η καθυστέρηση των καρέ τους χρησιμοποιούνται σε αυτή την περίπτωση, ενώ όλες οι άλλες ρυθμίσεις που χρησιμοποιούνται στα 2D γραφικά αγνοούνται.


Meshes - μόνο για τα αρχεία MS3D (να αποφεύγεται η χρήση αυτών των μοντέλων)

Μπορείτε επίσης να αλλάξετε την εμφάνιση του χαρακτήρα. Υπάρχουν κάποιες μέθοδοι που δουλεύουν με "meshes". Το  mesh είναι τμήμα του μοντέλου: συνήθως αποτελείται από διάφορα meshes που βασίζονται σε διαφορετικά υλικά. Μπορείτε να κρύψετε ή να εμφανίσετε ξεχωριστά τμήματα από το μοντέλο με τις μεθόδους HideMesh() και ShowMesh().

Μπορείτε επίσης να φορτώσετε ένα καινούριο mesh από ένα ξεχωριστό αρχείο με την μέθοδο AddMesh(). Αυτό είναι χρήσιμο, για παράδειγμα, αν θέλετε ο χαρακτήρας σας να κρατήσει ένα αντικείμενο στα χέρια του. Αυτή η μέθοδος δέχεται ως παραμέτρους το όνομα του αρχείου MS3D, το όνομα του mesh και το όνομα του κοκάλου που θέλετε να προσκολλήσετε το mesh. Με αυτό το τρόπο μπορείτε, για παράδειγμα, να τοποθετήσετε ένα καπέλο στο κεφάλι του χαρακτήρα ή ένα αντικείμενο στο χέρι του. Το καινούριο mesh "κολλάει" στο κόκαλο και ακολουθεί την κίνηση και στρέψη αυτού.

Η τελευταία από τις μεθόδους που ασχολείται με τα ξεχωριστά mesh είναι η RemoveMesh() που αφαιρεί μόνιμα ένα mesh από το μοντέλο.