Unity ve Oculus SDK ile el etkileşimleri-1
Merhabalar.
Bu yazımda Oculus SDK v43.0 ve Unity 2020.3.38f1 kullanarak Oculus Quest 2 cihazımızda, giriş yöntemi olarak ellerimizi kullanmayı öğreneceğimiz serimizin ilk bölümünü anlatmaya çalışacağım.
Ön hazırlıklarınızı(Unity kurulumu ve yeni 3D proje oluşturma, Oculus SDK yükleme, Quest 2 developer mode seçimi) yapabildiğinizi varsayarak direk konuya girmek istiyorum.
1- Hand Interactor Ekleme
Gerekli olan bütün elementler, Oculus SDK import ettiğimizde, prefab olarak proje dosyamıza geliyor.
- Öncelikle yeni oluşturduğumuz projeyle birlikte gelen Main Camera objesini siliyoruz.
- Proje dosyamızda “OculusInteractionSampleRig” aratıyoruz ve bulduğumuz prefab’ı sürükleyip bırakarak Hierarchy penceremize ekliyoruz.
- Ekledğimiz bu prefab’ı genişlettiğimizde karşımıza iki adet obje çıkıyor: OVRCameraRig ve InputOVR.
OVRCameraRig; baş,göz ve el anchorları barındırır (tam Türkçe karşılığı nedir bilmiyorum). Bu anchorlar sanal dünya ve gerçek dünya arasında etkileşim kurmamızı sağlar. Örneğin gerçek dünyadaki baş konumumuzun sanala aktarılması. Gerçekte eğildiğimizde veya başımızı döndürdüğümüzde sanal dünyada da başımızın aynı şekilde hareket etmesi gibi. Yine aynı şekilde, sanaldaki görüntünün lefteyeanchor ve righteyeanchor objelerinde bulunan kamera görüntülerinin bize aktarılması gibi.
InputOVR ise giriş yöntemlerimizdir. InputOVR genişlettiğimizde gördüğümüz “Controllers”, Quest 2 kontrolörlerini ifade eder. “Hands” ise input olarak ellerimizi kullandığımız bir giriş yöntemidir.
- Hierarchy’den InputOVR’ı, sonrasında LeftHand’i genişletelim. Proje dosyamızdan “HandGrabInteractor” prefabını bulurak, LeftHand altındaki “HandInteractorsLeft” içine sürükleyip bırakıyoruz.
- Son eklediğimiz HandGrabInteractor prefabını seçerek Inspectorda “Hand Ref(Script)” componentini buluyoruz. Buradaki “Hand” parametresi/özelliği kısmına, hierarchy’den “LeftHand”i sürükleyip bırakıyoruz.
- Son adımı “RightHand” için de yapacağız. InputOVR>Hands>RightHand>HandInteractorsRight içine HandGrapInteractor prefabını ekleyip, bu prefab içindeki Hand Ref kısmındaki Hand parametresine RightHand prefabını sürükleyip bırakıyoruz.
- InputOVR>Hands>LeftHand>HandInteractorsLeft seçerek inspectorda “Interactor Group” scriptini buluyoruz. HandInteractorsLeft altına eklediğimiz “HandGrabInteractor” bu script elementine atamamız gerekiyor. Aşağıdaki gibi, HandGrabInteractor sürükleyerek, script altındaki “Interactor” yazısının üstüne bırakıyoruz. HandGrabInteractor’ün Element 1 olarak geldiğine emin olalım.
- Son adımı HandInteractorsRight için de yapacağız. InputOVR>Hands>HandInteractorRight seçip, inspectordaki ilgili script içine HandInteractorRight altındaki HandGrabInteractor’ı sürükleyip bırakıyoruz.
2- Interactable Obje Ekleme
- Hierarchy’e 3D bir obje ekleyelim. Ben silindir ekledim. Boyutları ve pozisyonu aşağıdaki gibi ayarlayalım:
- 3D objeye Rigidbody componentini ekleyelim ve Use Gravity seçeneğini kaldıralım.
- Yine bu objemize “Grabbable” componentini ekleyelim.
- Son olarak “Hand Grab Interactable” componentini ekleyip test için çalıştıralım.
Sorunsuz bir şekilde silindiri tek elimle tutabiliyorum ve hareket ettirebiliyorum. Ama objeyi bir elimden diğer elime alamıyorum. Bunu düzeltmek için Grabbable scripti içerisinde “Transfer On Second Selection” seçeneğini aktif etmemiz gerekiyor.
3- Sonuç
Bir interactor ve bir interactable arasında nasıl etkileşim olduğunu gördük. Interactor olarak, InputOVR’da Hands giriş sistemimizi belirledik. Bunu nasıl yapmıştık, HandGrabInteractor ekleyerek. Sonrasında bu interactor ile etkileşime girebilecek bir obje belirledik. Bunu nasıl yapmıştık, 3D bir objeyi Grabbable yaptık. Daha sonrasında HandGrabInteraction ekledik.
Böylelikle ilk yazımın sonuna geldik. Hatalı olduğum, eksik kalan noktalar görürseniz lütfen bildirin. Unity ve Oculus SDK alanında çalışan/çalışmayı isteyenler varsa iletişim kurmaktan çekinmeyin lütfen.