השתמש בטכניקה זו כדי לשפר את תנועת האויב והתנהגותו על ידי חיקוי ראייה בסיסית.

זיהוי קו ראייה מוסיף שכבה של מורכבות למשחק שלך עם מנגנון המאפשר לדמויות או לאובייקטים לתפוס את הסביבה שלהם. אתה יכול להשתמש בתכונה זו להתנהגות בינה מלאכותית של האויב, מכניקת נראות שחקנים, משחק התגנבות ועוד.

ב-Godot, הצומת RayCast2D מציע דרך פשוטה ויעילה להשיג זיהוי קו ראייה.

הגדרת משחק Godot

לפני הצלילה לצמתים של RayCast2D, הגדר סביבת משחק דו-ממדית בסיסית ב-Godot 4. צור שחקן תו שיכול לנוע באמצעות כניסות מקלדת ולתקשר עם פלטפורמות.

ראשית, צור סצנה עבור דמות השחקן. הוסף CharacterBody2D צומת כשורש הסצנה. בתוך ה CharacterBody2D, הוסף CollisionShape2D עם צורת מלבן וא ספרייט2D לייצוג החזותי של הדמות.

הקוד המשמש במאמר זה זמין כאן מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.

להלן קוד ה-GDScript עבור תנועת הנגן:

extends CharacterBody2D

var speed = 300

func _physics_process(delta):
var input_dir = Vector2.ZERO

if Input.is_action_pressed("ui_left"):
input_dir.x -= 1

if Input.is_action_pressed("ui_right"):
input_dir.x += 1

if Input.is_action_pressed("ui_up"):
input_dir.y -= 1

instagram viewer

if 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() בשיטה, אתה יכול לגשת לאובייקט הראשון שנחתך על ידי הקרן. השיטה מחזירה null אם אין אובייקט בנתיב הקרן. זה מועיל במיוחד לזיהוי האובייקט הספציפי שאליו יש לנגן שלך קו ראייה.

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 צומת, אתה יכול לקבל תובנות קריטיות לגבי האינטראקציות בין הקרן לאובייקטים מתנגשים.

שיטות אלו מעצימות אותך לאסוף מידע חיוני שיכול להשפיע באופן משמעותי על מכניקת המשחק, אינטראקציות אובייקטים ומשוב שחקנים.

כולל תכונות נוספות

בנוסף לפונקציונליות הליבה של זיהוי קו הראייה, אתה יכול לשפר עוד יותר את הדינמיקה של המשחק שלך על ידי הטמעת כמה תכונות מתקדמות.

מפעילי אירועים

במקום רק להדפיס הודעה, אתה יכול להפעיל אירועים ספציפיים במשחק. למשל, חשיפת שבילים נסתרים, הפעלת מנגנונים או התרעה בפני אויבים על נוכחות השחקן יכולים להוסיף עומק למשחק שלך.

טיפול דינמי בחסימות

שקול תרחישים שבהם מכשולים יכולים לחסום את קו הראייה. הטמעת זיהוי חסימה דינמי מבטיח שקו הראייה מתעדכן בזמן אמת כאשר חפצים נעים פנימה והחוצה ממבט השחקן.

אינדיקטורים חזותיים מותאמים אישית

במקום להסתמך רק על טקסט, אתה יכול ליצור אינדיקטורים ויזואליים מותאמים אישית כדי להדגיש את הנוכחות של אינטראקציות קו ראייה. זה יכול להיות כרוך בשינוי צבע השחקן או האובייקט, הצגת סמל או הנפשת אלמנטים רלוונטיים.

מכניקת ערפל מלחמה

עבור משחקים ממוקדי אסטרטגיה או חקר, אתה יכול להציג ערפל של מכניקת מלחמה. זה מגביל את החזון של השחקן עד שהוא מבסס קו ראייה, חושף את עולם המשחק בהדרגה ומעודד קבלת החלטות אסטרטגיות.

שיטות עבודה מומלצות לזיהוי קו ראייה

אופטימיזציה של זיהוי קו הראייה חיונית לשמירה על חווית משחק חלקה. הנה כמה שיטות עבודה מומלצות שכדאי לזכור.

תדר Raycast

הימנע מביצוע הקרנות בכל פריים אם אין צורך. שקול לבדוק את קו הראייה רק ​​כאשר מיקום השחקן או הסביבה משתנים באופן משמעותי. זה עוזר להפחית חישובים מיותרים.

ריי אורך

איזון את אורך ההטלה שלך. קרניים ארוכות במיוחד יכולות להשפיע על הביצועים, אז בחרו באורך המכסה את השטח הדרוש תוך שמירה על עומס חישובי.

שכבות התנגשות

השתמש בשכבות התנגשות ובמסכות כדי לכוונן את האובייקטים שזיהוי קו הראייה מתייחס. זה מונע הקרנות מיותרות לאובייקטים לא רלוונטיים.

תוצאות שמירה במטמון

אם אתה מבצע את אותו קו ראייה עבור מספר אובייקטים או מסגרות, שקול לשמור את התוצאות במטמון כדי למנוע חישובים מיותרים.

אינטגרציה ברמת הפלטפורמה

התאם את מכניקת זיהוי קו הראייה שלך עם העיצוב ברמה של משחק הפלטפורמה שלך. קחו בחשבון את האנכיות של הסביבה, גבהים שונים של פלטפורמה ומכשולים פוטנציאליים שעלולים לחסום את קו הראייה.

ודא שמערכת הזיהוי שלך תואמת את הניואנסים האלה כדי ליצור חווית שחקן חלקה ואינטואיטיבית.

הופכים את משחקי Godot למעניינים יותר עם זיהוי קו הראייה

זיהוי קו ראייה מוסיף עומק וריאליזם לעולם המשחק שלך. שחקנים יכולים ליצור אסטרטגיה, להסתיר או לגשת לאתגרים בצורה שונה על סמך קו הראייה שלהם. המכונאי הזה יכול להפוך פלטפורמה פשוטה לחוויה סוחפת יותר, מה שהופך את המשחק למושך יותר ובלתי נשכח.