Unity 'de hareketler

HoloLens ve derinlikli hmd 'de Unity, el hareketleri ve hareket denetleyicileri için işlem yapmanız gereken iki temel yol vardır. Her iki uzamsal giriş kaynağına ait verilere Unity 'deki aynı API 'Ler aracılığıyla erişirsiniz.

Unity, Windows Mixed Reality için uzamsal giriş verilerine erişmenin iki birincil yolunu sağlar. ortak ınput. getbutton/ınput. getaxapı 'leri birden çok Unity xr sdk 'sı arasında çalışır, ancak Windows Mixed Reality 'e özgü ınteractionmanager/GestureRecognizer apı 'si, uzamsal giriş verilerinin tam kümesini kullanıma sunar.

Üst düzey bileşik hareket API 'Leri (GestureRecognizer)

Ad alanı:UnityEngine. xr. wsa. Input
Türler: GestureRecognizer, gesturesettings, InteractionSourceKind

Uygulamanız, uzamsal giriş kaynakları, dokunma, bekletme, düzenleme ve gezinme hareketlerinde daha üst düzey Birleşik hareketleri de algılayabilir. Bu bileşik hareketleri, GestureRecognizer kullanarak hem uygulamalı hem de hareket denetleyicileri genelinde tanıyabilirsiniz.

GestureRecognizer üzerindeki her bir hareket olayı, giriş için SourceKind ve hedefleme baş Ray 'i olay sırasında sağlar. Bazı olaylar, içeriğe özgü ek bilgiler sağlar.

Hareket tanıyıcı kullanarak hareketleri yakalamak için gereken birkaç adım vardır:

  1. Yeni bir hareket tanıyıcı oluşturma
  2. İzlenecek hareketleri belirtin
  3. Bu hareketlere yönelik olaylara abone olma
  4. Hareketleri yakalamaya başla

Yeni bir hareket tanıyıcı oluşturma

GestureRecognizerkullanmak Için bir GestureRecognizeroluşturmuş olmanız gerekir:

GestureRecognizer recognizer = new GestureRecognizer();

İzlenecek hareketleri belirtin

Setrecognizablehareketlerinizi ()aracılığıyla hangi hareketleri ilgilendiğinizi belirtin:

recognizer.SetRecognizableGestures(GestureSettings.Tap | GestureSettings.Hold);

Bu hareketlere yönelik olaylara abone olma

İlgilendiğiniz hareketlere yönelik olaylara abone olun.

void Start()
{
    recognizer.Tapped += GestureRecognizer_Tapped;
    recognizer.HoldStarted += GestureRecognizer_HoldStarted;
    recognizer.HoldCompleted += GestureRecognizer_HoldCompleted;
    recognizer.HoldCanceled += GestureRecognizer_HoldCanceled;
}

Not

Gezinti ve düzenleme hareketleri bir GestureRecognizerörneğine birbirini dışlıyor.

Hareketleri yakalamaya başla

Varsayılan olarak, GestureRecognizer , Startcapturinghareketlerinizi () çağrılana kadar girişi izlemez. Giriş, stopcapturinghareketlerinizi () işlendiği kareden önce gerçekleştirilirse, Stopcapturinghareketlerinizi () çağrıldıktan sonra bir hareket olayı oluşturulabilir. GestureRecognizer , hareketin gerçekten gerçekleştiği önceki çerçeve sırasında açık veya kapalı olup olmadığını anımsar ve bu nedenle, bu karenin Gaze hedefine göre hareket izlemeyi başlatmak ve durdurmak için güvenilir hale gelir.

recognizer.StartCapturingGestures();

Hareketleri yakalamayı durdur

Hareket tanımayı durdurmak için:

recognizer.StopCapturingGestures();

Hareket tanıyıcıyı kaldırma

Bir GestureRecognizer nesnesini yok etmeden önce abone olunan olaylar aboneliğini iptal etmeyi unutmayın.

void OnDestroy()
{
    recognizer.Tapped -= GestureRecognizer_Tapped;
    recognizer.HoldStarted -= GestureRecognizer_HoldStarted;
    recognizer.HoldCompleted -= GestureRecognizer_HoldCompleted;
    recognizer.HoldCanceled -= GestureRecognizer_HoldCanceled;
}

Unity 'de hareket denetleyicisi modelini işleme

Hareket denetleyicisi modeli ve teleporsyon
Hareket denetleyicisi modeli ve teleporsyon

Uygulamanızda, kullanıcılarınızın elinde tuttukta olduğu fiziksel denetleyicilerle eşleşen hareket denetleyicilerini işlemek için, karışık gerçeklik araç setindemotioncontroller prefab ' yi kullanabilirsiniz. Bu prefab, çalışma zamanında sistem tarafından yüklenen hareket denetleyicisi sürücüsünden doğru glTF modelini dinamik olarak yükler. Bu modelleri düzenleyicide el ile içeri aktarmak yerine dinamik olarak yüklemeniz önemlidir. böylece uygulamanız, kullanıcılarınızın sahip olabileceği geçerli ve gelecekteki denetleyiciler için fiziksel olarak doğru 3B modeller gösterecektir.

  1. Karma Gerçeklik araç takımını indirmek ve Unity projenize eklemek için Başlarken talimatlarını izleyin.
  2. Kullanmaya başlama adımlarının bir parçası olarak kameranızı MixedRealityCameraParent prefab ile değiştirdiyseniz, hazırsınız! Bu prefab, hareket denetleyicisi işlemesini içerir. aksi takdirde, Project bölmesinden sahneye varlıkları/holoaraç/giriş/prefabs/motioncontrollers. prefab ' yi ekleyin. Bu ön ceyi, kamerayı, Kullanıcı ile birlikte gelen Kullanıcı teleportlarında gezinmek için kullandığınız üst nesnenin bir alt öğesi olarak eklemek isteyeceksiniz. Uygulamanız teleini içermiyorsa, sahsitenizin köküne yalnızca prefab eklemeniz yeterlidir.

Nesneler üretiliyor

Nesneleri sanal gerçekte oluşturmak, ilk görünenden daha zor bir sorundur. En fiziksel tabanlı etkileşimlerde olduğu gibi, oyunda oluşturma beklenmedik bir şekilde hareket eder ve Immersion kesilir. Fiziksel olarak doğru bir oluşturma davranışını nasıl temsil ettiğini ve sizinle paylaşmak istiyoruz. platformumuza yönelik güncelleştirmeler aracılığıyla etkinleştirilen birkaç kılavuzla karşılaştığımız bir zaman harcadık.

Buradaoluşturmayı nasıl uygulayabileceğinizi gösteren bir örnek bulabilirsiniz. Bu örnek aşağıdaki dört Kılavuzu izler:

  • Konum yerine denetleyicinin hızını kullanın. Windows kasım güncelleştirmesinde, ' ' yaklaşık ' ' konum izleme durumundadavranış değişikliği yaptık. Bu durumda, yüksek doğruluk olduğunu düşüntiğimiz sürece denetleyicinin hız bilgileri bildirilmeye devam eder; bu, genellikle konumdan daha uzun bir süre yüksek doğruluk olur.

  • Denetleyicinin angular hızını ekleyin. Bu mantık, throwing.csGetThrownObjectVelAngVel Yukarıdaki paketin içindeki statik yöntemde bulunan dosyada yer alır:

    1. Açılı hız karşılandığına göre, oluşturulan nesne, throw şu andaki angular hızını korumalıdır: objectAngularVelocity = throwingControllerAngularVelocity;

    2. Oluşturulan nesnenin yığın ortası büyük olasılıkla, tutamaçtan kaynak olarak değil, büyük olasılıkla kullanıcının başvuru çerçevesindeki denetleyiciden farklı bir hız içeriyor. Nesnenin hızı bu şekilde katkıda bulunulan bölüm, denetleyici kaynağı etrafında oluşturulan nesnenin yığın merkezinin anında Tangential hızından oluşur. Bu Tangential hız, denetleyicinin, denetleyici kaynağı ve oluşturulan nesnenin kütle merkezi arasındaki mesafeyi temsil eden vektörle birlikte denetleyicinin bir çapraz ürünüdür.

      Vector3 radialVec = thrownObjectCenterOfMass - throwingControllerPos;
      Vector3 tangentialVelocity = Vector3.Cross(throwingControllerAngularVelocity, radialVec);
      
    3. Oluşturulan nesnenin toplam hızı, denetleyicinin hız ve bu Tangential hız toplamına göre belirlenir: objectVelocity = throwingControllerVelocity + tangentialVelocity;

  • Hızı uygulamamız gereken zamana kadar ödeyin. Düğmeye basıldığında, bu olayın, işletim sistemine Bluetooth kadar ölçeği kadar ölçeği olması 20 MS 'ye kadar sürebilir. Bu, bir denetleyici durum değişikliğini, basılmamış ya da başka bir şekilde bir şekilde yokladıysanız, bununla birlikte alacağınız denetleyicinin bu değişiklik durumunda bu değişiklikten önce olacağı anlamına gelir. Ayrıca, yoklama API 'imiz tarafından sunulan denetleyici pozları, karenin görüntüleneceği sırada 20 MS 'den daha fazla olabilecek olası bir pozu yansıtacak şekilde tahmin edilir. Bu, tutulan nesneleri işlemek için uygundur, ancak kullanıcının throw 'u oluşturduğumuzu hesapladığımızda, nesneyi hedeflemek için zaman sorunu çözer. Neyse ki, Kasım güncelleştirmesi ile ınteractionsourcebasılan veya ınteractionsourcerekiralık gibi bir Unity olayı gönderildiğinde, düğme basıldığında veya serbest bırakıldığında durum geçmiş poz verilerini geri alır. Oluşturma sırasında en doğru denetleyici işlemesini ve denetleyiciyi sağlamak için, uygun şekilde yoklama ve olay 'ı doğru şekilde kullanmanız gerekir:

  • Tutamacı kullanın. Angular hız ve hız, işaretçi poza değil, tutamaça göre raporlanır.

oluşturma gelecekteki Windows güncelleştirmeleriyle iyileşmeye devam eder ve bu konuda daha fazla bilgi bulmayı de bekleyebilir.

MRTK 'da hareket ve hareket denetleyicileri

Giriş Yöneticisi 'nden hareket ve hareket denetleyicisine erişebilirsiniz.

Öğreticilerle birlikte izleyin

Daha ayrıntılı özelleştirme örnekleri içeren adım adım öğreticiler, karma gerçeklik akademik Ilerimde sunulmaktadır:

MR giriş 213-hareket denetleyicisi
MR giriş 213-hareket denetleyicisi

Sonraki geliştirme kontrol noktası

Belirlediğimiz Unity geliştirme yolculuğunu takip ediyorsanız, MRTK çekirdeği oluşturma bloklarını araştırırken Orta ölçekli olursunuz. Buradan, sonraki yapı bloğuna devam edebilirsiniz:

Ya da karma gerçeklik platformu özelliklerine ve API 'Lerine atlayın:

Her zaman Unity geliştirme kontrol noktalarına dilediğiniz zaman geri dönebilirsiniz.

Ayrıca bkz.