बुनियादी दृष्टि का अनुकरण करके दुश्मन के आंदोलन और व्यवहार को बढ़ाने के लिए इस तकनीक का उपयोग करें।

लाइन-ऑफ़-विज़न डिटेक्शन आपके गेम में एक तंत्र के साथ जटिलता की एक परत जोड़ता है जो पात्रों या वस्तुओं को उनके परिवेश का एहसास कराता है। आप इस सुविधा का उपयोग दुश्मन एआई व्यवहार, खिलाड़ी दृश्यता यांत्रिकी, गुप्त गेमप्ले और बहुत कुछ के लिए कर सकते हैं।

गोडोट में, RayCast2D नोड लाइन-ऑफ़-विज़न पहचान प्राप्त करने का एक सरल और कुशल तरीका प्रदान करता है।

गोडोट गेम की स्थापना

RayCast2D नोड्स में गोता लगाने से पहले, Godot 4 में एक बुनियादी 2D गेम वातावरण स्थापित करें। एक खिलाड़ी बनाएं वह चरित्र जो कीबोर्ड इनपुट का उपयोग करके घूम सकता है और प्लेटफार्मों के साथ बातचीत करें।

सबसे पहले, खिलाड़ी के चरित्र के लिए एक दृश्य बनाएं। एक जोड़ना कैरेक्टरबॉडी2डी दृश्य के मूल के रूप में नोड। के अंदर कैरेक्टरबॉडी2डी, एक जोड़ना CollisionShape2D एक आयताकार आकार के साथ और एक स्प्राइट2डी चरित्र के दृश्य प्रतिनिधित्व के लिए.

इस आलेख में प्रयुक्त कोड इसमें उपलब्ध है गिटहब रिपॉजिटरी और यह आपके लिए एमआईटी लाइसेंस के तहत उपयोग करने के लिए निःशुल्क है।

प्लेयर मूवमेंट के लिए जीडीस्क्रिप्ट कोड यहां दिया गया है:

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

if Input.is_action_pressed("ui_down"):
input_dir.y += 1

velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)

अब, खिलाड़ी के साथ बातचीत करने के लिए कुछ प्लेटफ़ॉर्म बनाएं। आप उपयोग कर सकते हैं स्टेटिकबॉडी2डी प्लेटफ़ॉर्म का प्रतिनिधित्व करने के लिए उपयुक्त टकराव आकृतियों वाले नोड्स। प्लेटफ़ॉर्मिंग वातावरण बनाने के लिए उन्हें दृश्य में व्यवस्थित करें।

RayCast2D की स्थापना

लाइन-ऑफ़-विज़न डिटेक्शन बनाने के लिए, इसका उपयोग करें रेकास्ट2डी नोड. यहां बताया गया है कि आप कैसे जोड़ सकते हैं रेकास्ट2डी जीडीस्क्रिप्ट का उपयोग कर नोड:

var raycast: RayCast2D

func _ready():
raycast = RayCast2D.new()
add_child(raycast)

इस स्क्रिप्ट को इसके साथ संलग्न करना सुनिश्चित करें कैरेक्टरबॉडी2डी नोड. यह कोड स्निपेट एक नया बनाता है रेकास्ट2डी नोड और इसे खिलाड़ी के चरित्र के साथ एक बच्चे के रूप में जोड़ता है।

लाइन-ऑफ़-विज़न इंटरेक्शन पर विज़ुअल फीडबैक प्रदान करना

अब, जब भी खिलाड़ी की दृष्टि रेखा किसी प्लेटफ़ॉर्म के साथ प्रतिच्छेद करती है तो आप एक संदेश प्रिंट कर सकते हैं। खिलाड़ी की स्थिति से गति की दिशा में एक किरण फेंकें। यदि किरण किसी वस्तु से टकराती है, तो इसका मतलब है कि खिलाड़ी की दृष्टि की रेखा किसी प्लेटफ़ॉर्म पर है।

निम्नलिखित कोड को उसी स्क्रिप्ट में जोड़ें:

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() विधि आपको पहले प्रतिच्छेदित वस्तु की संसाधन आईडी (आरआईडी) बता सकती है:

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_सामान्य()

बातचीत को बेहतर ढंग से समझने के लिए, get_collision_सामान्य() आपको टकराव बिंदु पर आकृति का सामान्य रूप प्रदान करता है। ऐसे मामलों में जहां किरण आकार के भीतर शुरू होती है और अन्दर से मारो सत्य है, सामान्य रिटर्न होगा वेक्टर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)

की इन उन्नत क्षमताओं का उपयोग करना रेकास्ट2डी नोड, आप किरण और टकराने वाली वस्तुओं के बीच की बातचीत में महत्वपूर्ण अंतर्दृष्टि प्राप्त कर सकते हैं।

ये विधियां आपको आवश्यक जानकारी इकट्ठा करने के लिए सशक्त बनाती हैं जो गेमप्ले यांत्रिकी, ऑब्जेक्ट इंटरैक्शन और प्लेयर फीडबैक को महत्वपूर्ण रूप से प्रभावित कर सकती हैं।

अतिरिक्त सुविधाओं सहित

कोर लाइन-ऑफ-विज़न डिटेक्शन कार्यक्षमता के साथ-साथ, आप कुछ उन्नत सुविधाओं को लागू करके अपने गेम की गतिशीलता को और बढ़ा सकते हैं।

इवेंट ट्रिगर

केवल एक संदेश प्रिंट करने के बजाय, आप विशिष्ट इन-गेम इवेंट ट्रिगर कर सकते हैं। उदाहरण के लिए, छिपे हुए रास्तों को उजागर करना, तंत्र को सक्रिय करना, या खिलाड़ी की उपस्थिति के बारे में दुश्मनों को सचेत करना आपके गेमप्ले में गहराई जोड़ सकता है।

गतिशील बाधा प्रबंधन

उन परिदृश्यों पर विचार करें जहां बाधाएं दृष्टि की रेखा को बाधित कर सकती हैं। गतिशील रुकावट का पता लगाने को लागू करने से यह सुनिश्चित होता है कि जैसे ही वस्तुएं खिलाड़ी के दृश्य के अंदर और बाहर जाती हैं, दृष्टि की रेखा वास्तविक समय में अपडेट हो जाती है।

कस्टम विज़ुअल संकेतक

केवल पाठ पर निर्भर रहने के बजाय, आप लाइन-ऑफ़-विज़न इंटरैक्शन की उपस्थिति को उजागर करने के लिए कस्टम विज़ुअल संकेतक बना सकते हैं। इसमें प्लेयर या ऑब्जेक्ट स्प्राइट का रंग बदलना, एक आइकन प्रदर्शित करना, या शामिल हो सकता है प्रासंगिक तत्वों को एनिमेट करना.

युद्ध यांत्रिकी का कोहरा

रणनीति या अन्वेषण-केंद्रित खेलों के लिए, आप युद्ध यांत्रिकी के कोहरे का परिचय दे सकते हैं। यह खिलाड़ी की दृष्टि को तब तक प्रतिबंधित करता है जब तक कि वे दृष्टि की एक रेखा स्थापित नहीं कर लेते, खेल की दुनिया को धीरे-धीरे प्रकट करते हैं और रणनीतिक निर्णय लेने को प्रोत्साहित करते हैं।

दृष्टि रेखा का पता लगाने के लिए सर्वोत्तम अभ्यास

सुचारू गेमप्ले अनुभव को बनाए रखने के लिए लाइन-ऑफ़-विज़न डिटेक्शन को अनुकूलित करना महत्वपूर्ण है। यहां ध्यान में रखने योग्य कुछ सर्वोत्तम अभ्यास दिए गए हैं।

रेकास्ट आवृत्ति

यदि आवश्यक न हो तो प्रत्येक फ्रेम पर रेकास्ट करने से बचें। दृष्टि रेखा की जाँच केवल तभी करने पर विचार करें जब खिलाड़ी की स्थिति या वातावरण में महत्वपूर्ण परिवर्तन हो। इससे अनावश्यक गणनाओं को कम करने में मदद मिलती है।

किरण की लंबाई

अपने रेकास्ट की लंबाई को संतुलित करें। अत्यधिक लंबी किरणें प्रदर्शन को प्रभावित कर सकती हैं, इसलिए ऐसी लंबाई चुनें जो कम्प्यूटेशनल भार को ध्यान में रखते हुए आवश्यक क्षेत्र को कवर करे।

टकराव की परतें

लाइन-ऑफ़-विज़न डिटेक्शन किन वस्तुओं पर विचार करता है, इसे ठीक करने के लिए टकराव परतों और मास्क का उपयोग करें। यह अप्रासंगिक वस्तुओं पर अनावश्यक किरणों को फैलने से रोकता है।

कैशिंग परिणाम

यदि आप कई वस्तुओं या फ़्रेमों के लिए दृष्टि पहचान की एक ही पंक्ति का प्रदर्शन कर रहे हैं, तो अनावश्यक गणनाओं से बचने के लिए परिणामों को कैशिंग करने पर विचार करें।

प्लेटफ़ॉर्मर-स्तरीय एकीकरण

अपने लाइन-ऑफ़-विज़न डिटेक्शन मैकेनिक्स को लेवल डिज़ाइन के साथ संरेखित करें आपका प्लेटफ़ॉर्मर गेम. पर्यावरण की ऊर्ध्वाधरता, विभिन्न प्लेटफ़ॉर्म ऊंचाइयों और संभावित बाधाओं पर विचार करें जो दृष्टि की रेखा को बाधित कर सकती हैं।

सुनिश्चित करें कि आपका डिटेक्शन सिस्टम एक सहज और सहज खिलाड़ी अनुभव बनाने के लिए इन बारीकियों को समायोजित करता है।

गोडोट गेम्स को लाइन-ऑफ़-विज़न डिटेक्शन के साथ और अधिक आकर्षक बनाना

लाइन-ऑफ़-विज़न डिटेक्शन आपके गेम की दुनिया में गहराई और यथार्थवाद जोड़ता है। खिलाड़ी अपनी दृष्टि रेखा के आधार पर अलग-अलग तरह से रणनीति बना सकते हैं, छिप सकते हैं या चुनौतियों का सामना कर सकते हैं। यह मैकेनिक एक साधारण प्लेटफ़ॉर्मर को अधिक गहन अनुभव में बदल सकता है, जिससे गेमप्ले अधिक आकर्षक और यादगार बन जाता है।