अपने सीन में 3D ऑब्जेक्ट की सही जगह तय करने के लिए, raycast या हिट-टेस्ट करें. सही प्लेसमेंट से यह पक्का होता है कि एआर कॉन्टेंट सही (दिखने वाले) साइज़ में रेंडर हो.
हिट के नतीजों के टाइप
हिट-टेस्ट से चार तरह के हिट नतीजे मिल सकते हैं, जैसा कि नीचे दी गई टेबल में दिखाया गया है.
हिट के नतीजे का टाइप | ब्यौरा | ओरिएंटेशन | इस्तेमाल का उदाहरण | मेथड कॉल |
---|---|---|---|---|
गहराई | किसी बिंदु की सही गहराई और ओरिएंटेशन का पता लगाने के लिए, पूरे सीन की गहराई की जानकारी का इस्तेमाल करता है | 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()
को कॉल करें. यह ARRaycast
तब तक अपने-आप अपडेट होगा, जब तक कि आप ARRaycastManager.RemoveRaycast()
को कॉल नहीं करते या ARRaycastManager
को बंद नहीं कर देते.
शुरुआत में, ARRaycast
की दूरी वही होगी जो AddRaycast()
कॉल में दी गई है. जब ARCore, स्थानीय ज्यामिति को मैप कर लेता है और उसे कोई इंटरसेक्शन प्लेन मिल जाता है, तो दूरी को असल दूरी में अपडेट कर दिया जाता है. दूरी में बदलाव होने से, ऑब्जेक्ट के "साइज़" या स्केल पर असर पड़ सकता है.