3-cü gün: AR-da Planet İzləmə üsulundan necə istifadə etmək və Birlikdən istifadə edərək obyektləri yerləşdirmək - AR üçün təlimatlar

Bu dərslikdə ətrafımızda olan təyyarələri müəyyənləşdirərək genişlənmiş bir reallıq tətbiqini yaratmağı öyrənəcəyik. Bunu həm Raycasting və AR təməl istifadə edərək, həm iOS, həm də Android platformaları üçün edəcəyik.

Bu 30 gündə 30 layihə yayımlamağa çalışdığımız 30 günlük bir sprintin bir hissəsidir, bu tam layihələri sıfırdan qurmaq deməkdir. Kodu iki dəfə yoxlayın, təlimatı yazıb sonra göndərin. Hər hansı bir yazım varsa bizə bildirin və ümid edirəm bu dərslikdən və layihədən zövq alacaqsınız.

Giriş

Buradakı bir əvvəlki dərsdə, AR Tətbiqini və ətrafımızda təyyarələri müəyyənləşdirməyi öyrəndik. Bu yazıda obyektləri AR'ya aşkar edilmiş bir təyyarədə yerləşdirməyi öyrənəcəyik.

Bir təyyarəyə vurub təyyarədəki bu mövqedə bir obyekt yarada biləcəksiniz. Nəhayət, sadə bir küp kürü edəcəyik, ancaq başqa hər hansı bir obyekt də ola bilər.

Başlamaq

Ön şərtlər

1-ci gün məqaləsini buradan izləyin.

  • Birlik 2019.2.18f1
  • AR Vəqfi 2.0.2
  • Android və ya iOS cihazı
  • Əsas C # proqramlaşdırma və anlama bacarıqları

Bunu necə edəcəyimizi əvvəldə gördüyümüz kimi bu layihə həm Android, həm də iOS-da işləyəcək. Universal AR Tətbiqi necə ediləcəyi haqqında daha çox məlumat üçün buradan oxuya bilərsiniz.

İstədiyiniz təyyarələri müəyyənləşdirmək və seçmək üçün Raycasting istifadə edəcəyik. Buradan Plane Sahəsinin Hesablanması Təlimində daha çox bişirmək haqqında danışdıq. Raycasting, müəyyən bir istiqaməti olan bir nöqtədə meydana gələn xəyali bir xətt yaradır. Rey hər hansı bir toqquşucuya və ya Rigidbody kimi bir fizika obyektinə dəysə, Hit obyekti haqqında məlumat ala bilərik.

Bununla birlikdə AR Vəqfi əvvəllər qurduğumuz AR Raycast Manager adlı öz Raycasting metodunu təqdim edir. Bu layihə üçün tələb etdiyimizi təmin etdiyi üçün bu sinifdən istifadə edəcəyik. Tətbiqimiz aşağıdakı kimi işləyəcək.

Səhnədə aşkar edilmiş təyyarələrə qarşı ekranda və Raycastda toxunuşları aşkarlayacaq bir CubeManager sinifimiz olacaq. Bir təyyarə şüa ilə müəyyən edildikdə, şüanın təyyarənin vurduğu yerini alacağıq və yeni bir kub oyunumuzu oradakı prefabdan yaradacağıq. Yenidən kublara vursaq, kubu silirik.

İcra

Əvvəlcə Cube prefabımızı yaradaq. Hiyerarşidə sağ vurun -> 3D obyekt -> Kub. Bu, səhnədə yeni bir Cube oyun layihəsi yaradacaqdır.

Kuba vurduğumuz zaman bir kubu silmək istədiyimiz üçün, bu, bizim kub prefab etdiyimizi misilsiz şəkildə müəyyənləşdirmək istəyirik, bunu bir sıra yollarla edə bilərik, lakin sadə və effektiv metod kubumuzu etiketləməkdir bir simli ilə prefab. Biz küpə qarşı Raycast etdikdə, etiketi müqayisə edib, vurduğumuz bir kubun olub olmadığını öyrənə bilərik.

Birlikdə bir neçə standart etiket olacaq, ancaq yenisini yaratmaq və əvvəlcə kub oyunobyektinə təyin etmək istəyirik. Kub seçildikdən sonra, Müfəttiş penceresinde, sol üstdə Tag etiketi var.

Bunu seçin və göstərilən etiketlər siyahısının altındakı etiketi əlavə et seçin. Birlik Müfəttiş Pəncərəsində Etiketlər və Layers səhifəsini açacaqdır.

Etiketlər altındakı "+" işarəsini vurun.

Adı "kub" (kiçiklər) olaraq daxil edin və saxla. Aşağıdakı kimi görünməlidir.

Cube gameobjects inspektorundakı "kub" etiketini seçin. İndi bu Cube oyun layihəsindən bir prefab hazırlamaq üçün süründürün və Layihə pəncərəsindəki Prefabs qovluğuna atın. İndi Cube oyun obyektini iyerarxiyadan silə bilərsiniz.

Sonrakı, CubeManager sinifimizi quraq. Hierarchy-də sağ düymə ilə yeni bir oyun layihəsi yaratacağıq> Boş yarat -> CubeManager adını dəyiş.

Bu oyun layihəsinə yeni bir c # skriptini əlavə edib əlavə edəcəyik. Bu oyun obyektlərinin müfəttişinə komponent əlavə edin - CubeManager'də yazın -> Yeni skript -> Yaradın və əlavə edin. Birlik indi layihələrin kök qovluğunda - Aktivlər - CubeManager.cs adlı yeni bir skript yaradacaqdır. Daha yaxşı layihə quruluşunun idarə edilməsi üçün Skriptlər adlı yeni bir qovluğa köçürə bilərsiniz.

CubeManager skriptini iki dəfə vurun və Visual Studio ilə açılmalıdır.

ARRaycastManager komponentinə və kub prefabına istinadlar lazımdır. Beləliklə, iki ictimai sahə yaradırıq və müfəttişdən təyin edəcəyik.

ictimai ARRaycastManager arRaycastManager; ictimai GameObject cubePrefab;

Ekrandakı toxunuşları yoxlamaq istədiyimizdən. Bunun üçün Giriş sinifindən istifadə edəcəyik. Və hər çərçivəyə toxunmadığını yoxlayırıq, Yeniləmə metodu içərisində edirik.

əgər (Giriş.touchCount> 0) {var touch = Giriş.GetTouch (0); if (touch.phase == TouchPhase.Ended) {if (Input.touchCount == 1) {}}}

Cari toxunuşa və barmaqların sayını ifadə edən touchCount-a sahib olduqdan sonra ekranda cəmi 1, biz Raycast-ı edə bilərik.

İki növ Raycast ifa edəcəyik. Biri təyyarələrin aşkarlanması, ikincisi kubların aşkarlanması üçündür.

Birincisi, ARRaycastManager istifadə edəcəyimiz təyyarələr. Bu sinifin Raycast metodu vurduğumuz obyektlər haqqında məlumatı saxlayan ARRaycastHit-in siyahısına ehtiyac duyur.

şəxsi siyahısı arRaycastHits = yeni Siyahı ();

İndi ekrandakı touch.position-dən Raycast-ı əldə edə bilərik. Şüa bir şeyə dəysə, metod gerçək qayıdır və hitlər arRaycastHits dəyişənində saxlanılır. Xitlər məsafəyə görə sıralanır və buna görə siyahıdakı ilk bənd ən qısa olacaqdır.

əgər (arRaycastManager.Raycast (touch.position, arRaycastHits)) {}

Kubları yaratmaq və məhv etmək üçün Helper metodlarını da yaradaq.

xüsusi boşluq CreateCube (Vector3 mövqeyi) {Instantiate (cubePrefab, mövqe, Quaternion.identity); } xüsusi boşluq SilCube (GameObject cubeObject) {Destroy (cubeObject); }

İndi onları Raycast içimizdən zəng edə bilərik.

// Raycast Planes if (arRaycastManager.Raycast (touch.position, arRaycastHits)) {var pose = arRaycastHits [0] .pose; CreateCube (poz.pozisiya); qayıtmaq; }

Sonra, bir Raycastın bir kubu vurduğunu aşkar etmək istəyirik. Bunun üçün Physics.Raycast istifadə edəcəyik.

Səhnəmizi dünya məkanına aparan touch.position-dən Ray yaradaq.

Ray ray = Camera.main.ScreenPointToRay (touch.position);

İndi bu Ray-a qarşı Raycast edə bilərik və Hit nəticəsindən kubun etiketini müəyyənləşdirdiyimizə görə müqayisə edə bilərik. Etiket uyğun gəlirsə, biz DeleteCube metodunu çağırırıq.

if (Fizika.Raycast (ray, RaycastHit vurdu)) {if (hit.collider.tag == "kub") {DeleteCube (hit.collider.gameObject); }}

İndi ssenarini saxla və birliyə qayıdın. Bundan sonra, skript tərtib edildikdən sonra CubeManager müfəttişindəki ictimai sahələri görəcəksiniz.

AR Session Origin oyun layihəsindən AR Raycast meneceri və layihə baxımından kub prefab.

Bu belədir! İndi layihəni qurun, hədəf cihazınıza yerləşdirin və sınaqdan keçirin!

Əvvəlcə https://tutorialsforar.com saytında 19 Fevral 2020 tarixində yayımlandı.