अपने सीन में 3D ऑब्जेक्ट का सही प्लेसमेंट तय करने के लिए, रेकास्ट या हिट-टेस्ट करें. सही प्लेसमेंट से यह पक्का होता है कि एआर कॉन्टेंट सही (बेहतर) साइज़ में रेंडर हो.
हिट के नतीजे के टाइप
हिट-टेस्ट से चार अलग-अलग तरह के हिट मिल सकते हैं, जैसा कि नीचे दी गई टेबल में दिखाया गया है.
हिट के नतीजे का टाइप | ब्यौरा | ओरिएंटेशन | इस्तेमाल का उदाहरण | मेथड कॉल |
---|---|---|---|---|
गहराई | किसी पॉइंट की सही गहराई और ओरिएंटेशन पता करने के लिए, पूरे सीन की डेप्थ की जानकारी का इस्तेमाल किया जाता है | 3D सतह के लंबवत | किसी भी सतह पर वर्चुअल ऑब्जेक्ट रखें (न कि सिर्फ़ फ़्लोर और दीवारों पर) |
यह सुविधा काम करे, इसके लिए Depth चालू होना चाहिए.ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
जहाज़ | पॉइंट की सही गहराई और ओरिएंटेशन का पता लगाने के लिए, हॉरिज़ॉन्टल और/या वर्टिकल सतहों पर हिट करें | 3D सतह के लंबवत | हवाई जहाज़ की पूरी ज्यामिति का इस्तेमाल करके हवाई जहाज़ (फ़्लोर या दीवार) पर कोई चीज़ रखें. सही स्केल तुरंत चाहिए. डेप्थ हिट-टेस्ट के लिए फ़ॉलबैक |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
सुविधा की जगह | पॉइंट की सही पोज़िशन और ओरिएंटेशन का पता लगाने के लिए, उपयोगकर्ता की ओर से टैप किए जाने वाले हिस्से के आस-पास मौजूद विज़ुअल सुविधाओं की मदद ली जाती है | 3D सतह के लंबवत | किसी भी सतह पर (न कि सिर्फ़ फ़्लोर और दीवार पर) ऑब्जेक्ट को रखें |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
परसिस्टेंट रेकास्ट (इंस्टैंट प्लेसमेंट) | कॉन्टेंट को जगह की जानकारी देने के लिए स्क्रीन स्पेस का इस्तेमाल किया जाता है. शुरुआत में, ऐप्लिकेशन से मिली अनुमानित डेप्थ का इस्तेमाल किया जाता है. यह तुरंत काम करता है. हालांकि, जब ARCore किसी सीन की असल ज्यामिति तय कर लेता है, तो पोज़ और असल डेप्थ बदल जाती है | +Y ऊपर की ओर इशारा करता है, गुरुत्वाकर्षण के उलट है | हवाई जहाज़ की पूरी ज्यामिति का इस्तेमाल करके, किसी चीज़ को हवाई जहाज़ (फ़्लोर या दीवार) पर रखें, जहां वीडियो को तेज़ी से लगाने की ज़रूरत हो. ऐसा करने से अनुभव, अज्ञात शुरुआती गहराई और स्केल को सहन कर सकता है |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
स्टैंडर्ड रेकास्ट करें
रेकास्ट (हिट-टेस्ट) करने के लिए ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
को कॉल करें. ARRaycastManager
सभी TrackableType
का समर्थन करता है.
var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
return;
// Raycast against planes and feature points.
const TrackableType trackableTypes =
TrackableType.FeaturePoint |
TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
// Raycast hits are sorted by distance, so the first one will be the closest hit.
var hit = hits[0];
// Do something with hit.
}
स्वैच्छिक किरण और दिशा का इस्तेमाल करके रेकास्ट करना
आम तौर पर, रेकास्ट को डिवाइस या डिवाइस के कैमरे से ली गई किरणों के तौर पर देखा जाता है. हालांकि, स्क्रीन-स्पेस पॉइंट के बजाय, दुनिया के अंतरिक्ष निर्देशांकों में आर्बिट्रेरी किरण का इस्तेमाल करके रेकास्ट करने के लिए, Raycast(Ray, List<ARRaycastHit>, TrackableType)
का इस्तेमाल किया जा सकता है.
ARRaycastHit
का इस्तेमाल करके ऐंकर बनाएं
रेकास्ट हिट पाने के बाद, GameObject.AddComponent<ARAnchor>
का इस्तेमाल करके एक एंकर बनाएं और उसे अपने GameObject
में कॉम्पोनेंट के तौर पर जोड़ें. ऐसा करने के लिए, रेकास्ट हिट को इनपुट के तौर पर इस्तेमाल करें. ARAnchor
कॉम्पोनेंट, गेम ऑब्जेक्ट के Transform
को लगातार अपडेट करता रहेगा, ताकि हिट के नतीजे के लिए गेम ऑब्जेक्ट, दिए गए Trackable
से अटैच बना रहे.
स्थायी रेकास्ट (झटपट प्लेसमेंट)
लगातार रेकास्ट, स्क्रीन की जगह की जानकारी और इनपुट के तौर पर सतह से अनुमानित दूरी का इस्तेमाल करके, आपके सीन में एआर (ऑगमेंटेड रिएलिटी) कॉन्टेंट रखने के लिए नया ARRaycast
बनाते हैं. ARCore में, इसे इंस्टैंट प्लेसमेंट कहा जाता है.
कोई ऐसा ARRaycast
बनाने के लिए, ARRaycastManager.AddRaycast()
को कॉल करें जो अपने-आप तब तक अपडेट होता रहता है, जब तक कि आप ARRaycastManager.RemoveRaycast()
को कॉल नहीं करते या ARRaycastManager
को बंद नहीं कर देते.
शुरुआत में, ARRaycast
की दूरी, AddRaycast()
कॉल में दी गई दूरी होगी. जब ARCore ने स्थानीय ज्यामिति को मैप कर लिया है और एक इंटरसेक्टिंग प्लेन मिल जाता है, तो दूरी को असल दूरी में अपडेट कर दिया जाता है. दूरी में बदलाव से, दिखने वाले "साइज़" पर असर पड़ सकता है या ऑब्जेक्ट का अनुमानित स्केल.