Χρησιμοποιήστε αυτήν την τεχνική για να βελτιώσετε την κίνηση και τη συμπεριφορά του εχθρού, μιμούμενοι το βασικό όραμα.
Η ανίχνευση οπτικής επαφής προσθέτει ένα επίπεδο πολυπλοκότητας στο παιχνίδι σας με έναν μηχανισμό που επιτρέπει σε χαρακτήρες ή αντικείμενα να αντιλαμβάνονται το περιβάλλον τους. Μπορείτε να χρησιμοποιήσετε αυτήν τη δυνατότητα για συμπεριφορά εχθρού AI, μηχανικούς ορατότητας παικτών, stealth gameplay και πολλά άλλα.
Στο Godot, ο κόμβος RayCast2D προσφέρει έναν απλό και αποτελεσματικό τρόπο για την επίτευξη ανίχνευσης οπτικής επαφής.
Ρύθμιση του παιχνιδιού Γκοντό
Πριν βουτήξετε σε κόμβους RayCast2D, δημιουργήστε ένα βασικό περιβάλλον 2D παιχνιδιού στο Godot 4. Δημιουργήστε έναν παίκτη χαρακτήρας που μπορεί να μετακινηθεί χρησιμοποιώντας εισόδους πληκτρολογίου και αλληλεπιδρούν με πλατφόρμες.
Πρώτα, δημιουργήστε μια σκηνή για τον χαρακτήρα του παίκτη. Πρόσθεσε ένα CharacterBody2D κόμβος ως η ρίζα της σκηνής. μεσα στην CharacterBody2D, πρόσθεσε ένα CollisionShape2D με ορθογώνιο σχήμα και α Sprite2D για την οπτική αναπαράσταση του χαρακτήρα.
Ο κώδικας που χρησιμοποιείται σε αυτό το άρθρο είναι διαθέσιμος σε αυτό Αποθετήριο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.
Ακολουθεί ο κωδικός GDScript για την κίνηση του παίκτη:
extends CharacterBody2D
var speed = 300
func _physics_process(delta):
var input_dir = Vector2.ZEROif Input.is_action_pressed("ui_left"):
input_dir.x -= 1if Input.is_action_pressed("ui_right"):
input_dir.x += 1if Input.is_action_pressed("ui_up"):
input_dir.y -= 1if Input.is_action_pressed("ui_down"):
input_dir.y += 1
velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)
Τώρα, δημιουργήστε μερικές πλατφόρμες για να αλληλεπιδράσει ο παίκτης. Μπορείς να χρησιμοποιήσεις StaticBody2D κόμβους με κατάλληλα σχήματα σύγκρουσης για να αναπαραστήσουν τις πλατφόρμες. Τακτοποιήστε τα στη σκηνή για να δημιουργήσετε ένα περιβάλλον πλατφόρμας.
Ρύθμιση του RayCast2D
Για να δημιουργήσετε ανίχνευση οπτικής επαφής, χρησιμοποιήστε το RayCast2D κόμβος. Δείτε πώς μπορείτε να προσθέσετε ένα RayCast2D κόμβος που χρησιμοποιεί GDScript:
var raycast: RayCast2D
func _ready():
raycast = RayCast2D.new()
add_child(raycast)
Φροντίστε να επισυνάψετε αυτό το σενάριο στο CharacterBody2D κόμβος. Αυτό το απόσπασμα κώδικα δημιουργεί ένα νέο RayCast2D κόμβο και τον προσαρτά ως παιδί στον χαρακτήρα του παίκτη.
Παροχή οπτικής ανατροφοδότησης σχετικά με την αλληλεπίδραση οπτικής επαφής
Τώρα, μπορείτε να εκτυπώσετε ένα μήνυμα κάθε φορά που η οπτική γωνία του παίκτη τέμνεται με μια πλατφόρμα. Ρίξτε μια ακτίνα από τη θέση του παίκτη προς την κατεύθυνση της κίνησης. Εάν η ακτίνα συγκρούεται με ένα αντικείμενο, σημαίνει ότι ο παίκτης έχει οπτική επαφή με μια πλατφόρμα.
Προσθέστε τον ακόλουθο κώδικα στο ίδιο σενάριο:
func _physics_process(delta):
#... (previous movement code)raycast.target_position = Vector2(100, 0)
if raycast.is_colliding():
print("Collided with platform!")
Εδώ είναι η έξοδος:
Επέκταση της λειτουργικότητας του RayCast2D
Υπάρχουν πολλές προηγμένες λειτουργίες που μπορείτε να χρησιμοποιήσετε για να βελτιώσετε σημαντικά τη διαδραστικότητα και την πολυπλοκότητα του παιχνιδιού σας.
get_collider()
Χρησιμοποιώντας την get_collider() μέθοδο, μπορείτε να αποκτήσετε πρόσβαση στο πρώτο αντικείμενο που τέμνεται από την ακτίνα. Η μέθοδος επιστρέφει μηδενική αν δεν υπάρχει αντικείμενο στη διαδρομή της ακτίνας. Αυτό είναι ιδιαίτερα χρήσιμο για τον εντοπισμό του συγκεκριμένου αντικειμένου στο οποίο ο παίκτης σας έχει οπτική επαφή.
if raycast.is_colliding():
var collided_object = raycast.get_collider()
if collided_object:
print("You can see:", collided_object.name)
get_collider_rid()
ο get_collider_rid() Η μέθοδος μπορεί να σας πει το Αναγνωριστικό Πόρων (RID) του πρώτου τεμνόμενου αντικειμένου:
if raycast.is_colliding():
var collider_rid = raycast.get_collider_rid()
if !collider_rid.is_valid():
print("No valid object RID")
else:
print("Object RID:", collider_rid)
get_collider_shape()
ο get_collider_shape() Η συνάρτηση επιστρέφει το αναγνωριστικό σχήματος του πρώτου τεμνόμενου αντικειμένου ή 0 εάν δεν συμβεί σύγκρουση.
if raycast.is_colliding():
var collider_shape = raycast.get_collider_shape()
if collider_shape == 0:
print("No valid shape ID")
else:
print("Shape ID:", collider_shape)
get_collision_normal()
Για να κατανοήσετε καλύτερα την αλληλεπίδραση, get_collision_normal() σας δίνει το κανονικό σχήμα στο σημείο σύγκρουσης. Σε περιπτώσεις που η ακτίνα ξεκινά μέσα στο σχήμα και χτυπήστε_από_μέσα είναι αλήθεια, η κανονική επιστροφή θα είναι Διάνυσμα2(0, 0).
if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)
get_collision_point()
Όταν η ακτίνα τέμνει ένα αντικείμενο, get_collision_point() επιστρέφει το ακριβές σημείο σύγκρουσης σε καθολικές συντεταγμένες.
if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)
Χρησιμοποιώντας αυτές τις προηγμένες δυνατότητες του RayCast2D κόμβο, μπορείτε να αποκτήσετε κρίσιμες γνώσεις σχετικά με τις αλληλεπιδράσεις μεταξύ της ακτίνας και των συγκρουόμενων αντικειμένων.
Αυτές οι μέθοδοι σάς δίνουν τη δυνατότητα να συγκεντρώσετε βασικές πληροφορίες που μπορούν να επηρεάσουν σημαντικά τη μηχανική του παιχνιδιού, τις αλληλεπιδράσεις αντικειμένων και τα σχόλια των παικτών.
Συμπεριλαμβανομένων πρόσθετων χαρακτηριστικών
Εκτός από τη βασική λειτουργία ανίχνευσης οπτικής επαφής, μπορείτε να βελτιώσετε περαιτέρω τη δυναμική του παιχνιδιού σας εφαρμόζοντας ορισμένες προηγμένες λειτουργίες.
Ενεργοποιητές συμβάντων
Αντί να εκτυπώνετε απλώς ένα μήνυμα, μπορείτε να ενεργοποιήσετε συγκεκριμένα συμβάντα εντός του παιχνιδιού. Για παράδειγμα, η αποκάλυψη κρυφών μονοπατιών, η ενεργοποίηση μηχανισμών ή η ειδοποίηση των εχθρών για την παρουσία του παίκτη μπορεί να προσθέσει βάθος στο παιχνίδι σας.
Αντιμετώπιση Δυναμικών Αποφράξεων
Εξετάστε σενάρια όπου τα εμπόδια μπορούν να εμποδίσουν την οπτική επαφή. Η εφαρμογή ανίχνευσης δυναμικής απόφραξης διασφαλίζει ότι η οπτική επαφή ενημερώνεται σε πραγματικό χρόνο καθώς τα αντικείμενα μετακινούνται μέσα και έξω από την προβολή του παίκτη.
Προσαρμοσμένοι οπτικοί δείκτες
Αντί να βασίζεστε αποκλειστικά σε κείμενο, μπορείτε να δημιουργήσετε προσαρμοσμένες οπτικές ενδείξεις για να τονίσετε την παρουσία αλληλεπιδράσεων οπτικής επαφής. Αυτό μπορεί να περιλαμβάνει την αλλαγή του χρώματος του προγράμματος αναπαραγωγής ή του αντικειμένου sprite, την εμφάνιση ενός εικονιδίου ή εμψύχωση σχετικών στοιχείων.
Ομίχλη της Μηχανικής Πολέμου
Για παιχνίδια στρατηγικής ή εστιασμένα στην εξερεύνηση, μπορείτε να εισαγάγετε τη μηχανική ομίχλης πολέμου. Αυτό περιορίζει την όραση του παίκτη μέχρι να δημιουργήσει μια οπτική γωνία, αποκαλύπτοντας σταδιακά τον κόσμο του παιχνιδιού και ενθαρρύνοντας τη λήψη στρατηγικών αποφάσεων.
Βέλτιστες πρακτικές για την ανίχνευση οπτικής γωνίας
Η βελτιστοποίηση της ανίχνευσης οπτικής επαφής είναι ζωτικής σημασίας για τη διατήρηση μιας ομαλής εμπειρίας παιχνιδιού. Ακολουθούν ορισμένες βέλτιστες πρακτικές που πρέπει να έχετε κατά νου.
Συχνότητα Raycast
Αποφύγετε την εκτέλεση εκπομπών ακτίνων σε κάθε καρέ, εάν δεν είναι απαραίτητο. Εξετάστε το ενδεχόμενο να ελέγξετε για οπτική επαφή μόνο όταν η θέση του παίκτη ή το περιβάλλον αλλάξει σημαντικά. Αυτό βοηθά στη μείωση των περιττών υπολογισμών.
Μήκος ακτίνας
Ισορροπήστε το μήκος της εκπομπής ακτίνων σας. Οι εξαιρετικά μεγάλες ακτίνες μπορούν να επηρεάσουν την απόδοση, επομένως επιλέξτε ένα μήκος που να καλύπτει την απαραίτητη περιοχή, διατηρώντας παράλληλα υπό έλεγχο το υπολογιστικό φορτίο.
Στρώματα Σύγκρουσης
Χρησιμοποιήστε στρώματα σύγκρουσης και μάσκες για να ρυθμίσετε με ακρίβεια ποια αντικείμενα εξετάζει η ανίχνευση οπτικής επαφής. Αυτό αποτρέπει τις περιττές εκπομπές ακτίνων σε άσχετα αντικείμενα.
Αποτελέσματα προσωρινής αποθήκευσης
Εάν εκτελείτε την ίδια οπτική ανίχνευση για πολλά αντικείμενα ή πλαίσια, σκεφτείτε να αποθηκεύσετε τα αποτελέσματα στην κρυφή μνήμη για να αποφύγετε περιττούς υπολογισμούς.
Ενσωμάτωση σε επίπεδο πλατφόρμας
Ευθυγραμμίστε τους μηχανισμούς ανίχνευσης οπτικής επαφής με τη σχεδίαση επιπέδου του το παιχνίδι εξόδου σας. Λάβετε υπόψη την κατακόρυφη θέση του περιβάλλοντος, τα διαφορετικά ύψη πλατφόρμας και τα πιθανά εμπόδια που θα μπορούσαν να εμποδίσουν την οπτική γωνία.
Βεβαιωθείτε ότι το σύστημα ανίχνευσης ενσωματώνει αυτές τις αποχρώσεις για να δημιουργήσετε μια απρόσκοπτη και διαισθητική εμπειρία αναπαραγωγής.
Κάνοντας τα παιχνίδια Γκοντό πιο εμπλεκόμενα με την ανίχνευση οπτικής γωνίας
Η ανίχνευση οπτικής επαφής προσθέτει βάθος και ρεαλισμό στον κόσμο του παιχνιδιού σας. Οι παίκτες μπορούν να σχεδιάσουν στρατηγική, να κρυφτούν ή να προσεγγίσουν τις προκλήσεις διαφορετικά με βάση την οπτική τους γωνία. Αυτός ο μηχανικός μπορεί να μετατρέψει ένα απλό platformer σε μια πιο καθηλωτική εμπειρία, κάνοντας το παιχνίδι πιο ελκυστικό και αξέχαστο.