खोज…


पैरामीटर

पैरामीटर विवरण
मूल दुनिया में किरण का प्रारंभिक बिंदु निर्देशांक है
दिशा किरण की दिशा
maxDistance टक्करों के लिए किरण की अधिकतम दूरी की जांच करनी चाहिए
परत मुखौटा एक लेयर मास्क जो किरणों को चुनते समय कोलाइडर्स को ध्यान से देखने के लिए उपयोग किया जाता है।
queryTriggerInteraction निर्दिष्ट करता है कि इस क्वेरी को कहाँ ट्रिगर करना चाहिए।

भौतिकी रेकास्ट

यह फ़ंक्शन दृश्य में सभी maxDistance खिलाफ लंबाई की maxDistance direction की direction में बिंदु origin से एक किरण maxDistance

फ़ंक्शन origin direction maxDistance में लेता है और गणना करता है कि गेमऑबजेक्ट के सामने एक कोलाइडर है।

Physics.Raycast(origin, direction, maxDistance);

उदाहरण के लिए, यह फ़ंक्शन कंसोल को Hello World को प्रिंट करेगा यदि GameObject की 10 इकाइयों में कुछ जुड़ा हुआ है:

using UnityEngine;

public class TestPhysicsRaycast: MonoBehaviour 
{
    void FixedUpdate() 
    {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        
        if (Physics.Raycast(transform.position, fwd, 10)) 
            print("Hello World");
    }
}

Physics2D Raycast2D

आप जांच कर सकते हैं कि कोई एआई एक स्तर के किनारे से गिरने के बिना चल सकता है या नहीं।

using UnityEngine;
    
public class Physics2dRaycast: MonoBehaviour 
    {
        public LayerMask LineOfSightMask;
        void FixedUpdate() 
        {
            RaycastHit2D hit = Physics2D.Raycast(raycastRightPart, Vector2.down, 0.6f * heightCharacter, LineOfSightMask);
            if(hit.collider != null)
            {
                //code when the ai can walk
            }
            else
            {
                //code when the ai cannot walk
            }
    }
}

इस उदाहरण में दिशा सही है। वैरिएबल रेकास्ट रेयरपार्ट चरित्र का दाहिना हिस्सा है, इसलिए किरदार के दाहिने हिस्से में रेकास्ट होगा। दूरी किरदार की ऊंचाई से 0.6 गुना ज्यादा है, इसलिए जब वह मैदान पर मैदान में उतरता है तो वह हिट नहीं देता है और वह उस समय मैदान से कम होता है जिस समय वह खड़ा होता है। सुनिश्चित करें कि लेयरमास्क केवल जमीन पर सेट है, अन्यथा यह अन्य प्रकार की वस्तुओं का भी पता लगाएगा।

RaycastHit2D अपने आप में एक संरचना है और इतना हिट नहीं हो सकता है कि एक वर्ग नहीं है; इसका मतलब है कि आपको RaycastHit2D चर के कोलाइडर की जांच करनी होगी।

रेपकास्ट कॉल को एन्क्रिप्ट करना

यदि भविष्य में आपको टकराव के मेट्रिसेस को बदलने की आवश्यकता है, तो आपकी स्क्रिप्ट्स को सीधे Raycast कॉल करने से समस्याएँ हो सकती हैं, क्योंकि आपको परिवर्तनों को समायोजित करने के लिए प्रत्येक LayerMask फ़ील्ड को ट्रैक करना होगा। आपकी परियोजना के आकार के आधार पर, यह एक बहुत बड़ा उपक्रम बन सकता है।

Raycast कॉल को Raycast करने से आपके जीवन की रेखा आसान हो सकती है।

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

एक तरीका यह दृष्टिकोण करने के लिए LayerMask मूल्य स्थानांतरित करने के लिए है स्क्रिप्ट योग्य उदाहरणों और raycast सेवाओं की एक फार्म के रूप में उन है कि आप अपनी स्क्रिप्ट में इंजेक्षन का उपयोग करें।

// RaycastService.cs
using UnityEngine;

[CreateAssetMenu(menuName = "StackOverflow")]
public class RaycastService : ScriptableObject
{
    [SerializeField]
    LayerMask layerMask;

    public RaycastHit2D Raycast2D(Vector2 origin, Vector2 direction, float distance)
    {
        return Physics2D.Raycast(origin, direction, distance, layerMask.value);
    }

    // Add more methods as needed

}
// MyScript.cs
using UnityEngine;

public class MyScript : MonoBehaviour
{
    [SerializeField]
    RaycastService raycastService;

    void FixedUpdate()
    {
        RaycastHit2D hit = raycastService.Raycast2D(Vector2.zero, Vector2.down, 1f);
    }
}

यह आपको विभिन्न स्थितियों के लिए अलग-अलग लेयरमास्क संयोजनों के साथ, सभी रेकास्ट सेवाओं की एक संख्या बनाने की अनुमति देता है। आपके पास एक ही हो सकता है जो केवल ग्राउंड कोलाइडर को हिट करता है, और दूसरा जो ग्राउंड कोलाइडर और एक ही तरह के प्लेटफॉर्म को हिट करता है।

यदि आपको कभी भी अपने LayerMask सेटअप में कठोर बदलाव करने की आवश्यकता है, तो आपको केवल इन RaycastService संपत्तियों को अपडेट करने की आवश्यकता है।

आगे की पढाई



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow