Menggunakan Leap Motion dan Ultraleap — MRTK2

Pengontrol Gerakan Leap diperlukan untuk menggunakan penyedia data ini.

Penyedia Data Leap Motion memungkinkan pelacakan tangan artikulasi untuk VR dan dapat berguna untuk pembuatan prototipe cepat di editor. Penyedia data dapat dikonfigurasi untuk menggunakan Leap Motion Controller yang dipasang pada headset atau ditempatkan di wajah meja.

LeapMotionIntroGif

Penyedia ini dapat digunakan di editor dan pada perangkat saat berada di platform Mandiri. Ini juga dapat digunakan di editor saat berada di platform UWP tetapi TIDAK dalam build UWP.

Versi MRTK Versi Modul Leap Motion Unity Didukung
2.6.x 4.5.0, 4.5.1
2.7.0 - 2.7.2 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0
2.7.3 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0, 4.9.1 (lihat catatan di bawah)

Catatan

Unity Modules 4.9.1 memerlukan layanan pelacakan Gemini 5.2 atau yang lebih tinggi. Plugin Unity V4.9.1 hanya didukung secara resmi pada Unity 2019. Lihat catatan rilis untuk 4.9.1.

Modul Unity diganti namanya menjadi Plugin Unity di V5.0.0.

Versi MRTK Versi Plugin Ultraleap Unity Didukung
2.8.0 5.3.0 (lihat catatan di bawah)

Catatan

Plugin Unity versi 5.0.0, 5.1.0 dan 5.2.0 tidak didukung dalam versi MRTK apa pun. Pengguna disarankan untuk meningkatkan ke 5.3.0. Unity Plugin 5.3.0 memerlukan layanan pelacakan Gemini 5.2 atau yang lebih tinggi.

Menggunakan pelacakan tangan Leap Motion (dari Ultraleap) di MRTK

  1. Mengimpor MRTK dan Modul Unity Gerakan Leap / Plugin Unity

    • Instal Perangkat Lunak Pelacakan Gerakan Leap terbaru untuk mendapatkan Layanan Pelacakan jika belum diinstal
    • Impor paket Microsoft.MixedReality.Toolkit.Foundation ke dalam proyek Unity.
    • Unduh dan impor versi terbaru Leap Motion Unity Modules / Unity Plugin ke dalam proyek
      • Untuk Modul Unity: hanya impor paket Core dalam proyek
      • Untuk Unity Plugin: hanya impor paket Pelacakan dalam proyek. Hanya .unitypackages yang didukung untuk saat ini.

    Penting

    Unity menghentikan SelectionMode.OnlyUserModifiable setelah Unity 2019.4.19 yang menghasilkan kesalahan berikut yang berasal dari skrip Ultraleap Hotkeys.cs: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): kesalahan CS0619: 'SelectionMode.OnlyUserModifiable' sudah usang: ''OnlyUserModifiable' sudah usang. Gunakan 'Dapat Diedit' sebagai gantinya. (UnityUpgradeable) -> Dapat diedit'.

    Untuk mengatasi masalah ini, ubah SelectionMode.OnlyUserModifiable ke SelectionMode.Editable di skrip Hotkeys.cs yang terletak di Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Mengintegrasikan Leap Motion Unity Modules / Unity Plugin dengan MRTK

    • Setelah Unity Modules / Unity Plugin berada dalam proyek, navigasikan ke Mixed Reality>Toolkit>Utilitas>Leap Motion>Mengintegrasikan Modul Leap Motion Unity.

    Catatan

    Mengintegrasikan Modul Unity ke MRTK menambahkan 10 definisi perakitan ke proyek dan menambahkan referensi ke definisi rakitan Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Pastikan Visual Studio ditutup.

    LeapMotionIntegration

  3. Menambahkan Penyedia Data Leap Motion

    • Membuat adegan Unity baru
    • Tambahkan MRTK ke adegan dengan menavigasi ke Mixed Reality Toolkit>Tambahkan ke Adegan dan Konfigurasikan
    • Pilih objek game MixedRealityToolkit dalam hierarki dan pilih Salin dan Sesuaikan untuk mengkloning profil realitas campuran default.

    LeapMotionProfileClone

    • Pilih Profil Konfigurasi Input

    Profil Konfigurasi Input 1

    • Pilih Kloning di profil sistem input untuk mengaktifkan modifikasi.

    LeapMotionInputProfileClone

    • Buka bagian Penyedia Data Input , pilih Tambahkan Penyedia Data di bagian atas, penyedia data baru akan ditambahkan di akhir daftar. Buka penyedia data baru dan atur Jenis ke Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Leap Tambahkan Penyedia Data

    • Pilih Kloning untuk mengubah pengaturan Leap Motion default.

    LeapDataProviderPreClone

    • Penyedia Data Leap Motion berisi LeapControllerOrientation properti yang merupakan lokasi Pengontrol Gerakan Leap. LeapControllerOrientation.Headset menunjukkan pengontrol dipasang pada headset. LeapControllerOrientation.Desk menunjukkan pengontrol ditempatkan datar di atas meja. Nilai default diatur ke LeapControllerOrientation.Headset.

    • Setiap orientasi pengontrol berisi properti offset:

      • Properti offset orientasi headset mencerminkan properti offset di komponen LeapXRServiceProvider. LeapVRDeviceOffsetMode memiliki tiga opsi: Default, Offset Kepala Manual dan Transformasi. Jika mode offset adalah Default, maka offset tidak akan diterapkan ke Leap Motion Controller. Mode Offset Kepala Manual memungkinkan modifikasi tiga properti: LeapVRDeviceOffsetY, LeapVRDeviceOffsetZ dan LeapVRDeviceTiltX. Nilai properti offset sumbu kemudian diterapkan ke penempatan pengontrol default. Mode offset Transformasi berisi LeapVRDeviceOrigin properti Transformasi yang menentukan asal baru untuk Leap Motion Controller.

      • Orientasi Desk berisi LeapControllerOffset properti yang mendefinisikan posisi jangkar dari tangan lompatan meja. Offset dihitung relatif terhadap posisi kamera utama dan nilai defaultnya adalah (0,-0,2, 0,35) untuk memastikan tangan muncul di depan dan dalam pandangan kamera.

        Catatan

        Properti offset di profil diterapkan sekali ketika aplikasi dimulai. Untuk memodifikasi nilai selama runtime, dapatkan Penyedia Layanan Leap Motion dari Leap Motion Device Manager:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance dan ExitPinchDistance merupakan ambang jarak untuk deteksi gerakan mencubit/ketukan udara. Gerakan jepit dihitung dengan mengukur jarak antara ujung jari telunjuk dan ujung jempol. Untuk menaikkan peristiwa input ke bawah, defaultnya EnterPinchDistance diatur ke 0,02. Untuk menaikkan peristiwa input ke atas (keluar dari jepitan), jarak default antara ujung jari indeks dan ujung jempol adalah 0,05.

    LeapControllerOrientation: Headset (Default)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation: Meja

    LeapDeskGif

    LeapDeskInspector

  4. Menguji Penyedia Data Leap Motion

    • Setelah Penyedia Data Gerakan Leap ditambahkan ke profil sistem input, tekan putar, gerakkan tangan Anda di depan Pengontrol Gerakan Leap dan Anda akan melihat representasi bersama tangan.
  5. Membangun proyek Anda

Mendapatkan sendi tangan

Mendapatkan sambungan menggunakan Penyedia Data Leap Motion identik dengan pengambilan sendi tangan untuk Tangan Artikulasi MRTK. Untuk informasi selengkapnya, lihat Pelacakan Tangan.

Dengan MRTK dalam adegan unity dan Penyedia Data Leap Motion ditambahkan sebagai Penyedia Data Input di profil Sistem Input, buat objek game kosong dan lampirkan contoh skrip berikut.

Skrip ini adalah contoh sederhana tentang cara mengambil pose sendi telapak tangan di Tangan Gerakan Kabut. Bola mengikuti tangan Leap kiri sementara kubus mengikuti tangan Leap kanan.

using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;
using System.Collections.Generic;
using UnityEngine;

public class LeapHandJoints : MonoBehaviour, IMixedRealityHandJointHandler
{
    private GameObject leftHandSphere;
    private GameObject rightHandCube;

    private void Start()
    {
        // Register the HandJointHandler as a global listener
        CoreServices.InputSystem.RegisterHandler<IMixedRealityHandJointHandler>(this);

        // Create a sphere to follow the left hand palm position
        leftHandSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        leftHandSphere.transform.localScale = Vector3.one * 0.03f;

        // Create a cube to follow the right hand palm position
        rightHandCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        rightHandCube.transform.localScale = Vector3.one * 0.03f;
    }

    public void OnHandJointsUpdated(InputEventData<IDictionary<TrackedHandJoint, MixedRealityPose>> eventData)
    {
        if (eventData.Handedness == Handedness.Left)
        {
            Vector3 leftHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            leftHandSphere.transform.position = leftHandPalmPosition;
        }

        if (eventData.Handedness == Handedness.Right)
        {
            Vector3 rightHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            rightHandCube.transform.position = rightHandPalmPosition;
        }
    }
}

Tip alur kerja editor Unity

Menggunakan Penyedia Data Leap Motion tidak memerlukan headset VR. Perubahan pada aplikasi MRTK dapat diuji di editor dengan tangan Leap tanpa headset.

Leap Motion Hands akan muncul di editor, tanpa headset VR yang dicolokkan. LeapControllerOrientation Jika diatur ke Headset, maka pengontrol Leap Motion harus dipegang oleh satu tangan dengan kamera menghadap ke depan.

Catatan

Jika kamera dipindahkan menggunakan tombol WASD di editor dan LeapControllerOrientation adalah Headset, tangan tidak akan mengikuti kamera. Tangan hanya akan mengikuti gerakan kamera jika headset VR dicolokkan saat LeapControllerOrientationdiatur Headset. Tangan Leap akan mengikuti gerakan kamera di editor jika LeapControllerOrientation diatur ke Desk.

Menghapus Gerakan Lompatan dari Proyek

  1. Navigasikan keModul Unity Gerakan Lompatan Leap>PisahkanMixed Reality Toolkit>
    • Biarkan Unity merefresh sebagai referensi dalam file Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef dimodifikasi dalam langkah ini
  2. Tutup Unity
  3. Tutup Visual Studio, jika terbuka
  4. Buka File Explorer dan navigasi ke akar proyek MRTK Unity
    • Menghapus direktori UnityProjectName/Library
    • Menghapus direktori UnityProjectName/Assets/Plugins/LeapMotion
    • Menghapus file UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Buka kembali Unity

Di Unity 2018.4, Anda mungkin melihat bahwa kesalahan masih tetap ada di konsol setelah menghapus Library dan Leap Motion Core Assets. Jika kesalahan dicatat setelah membuka kembali, mulai ulang Unity lagi.

Kesalahan Umum

Leap Motion belum terintegrasi dengan MRTK

Untuk menguji apakah Modul Leap Motion Unity telah terintegrasi dengan MRTK:

  • Navigasi ke Mixed Reality Utilitas > Toolkit > Leap Motion > Check Status Integrasi
    • Ini akan menampilkan jendela pop-up dengan pesan tentang apakah Modul Leap Motion Unity telah terintegrasi dengan MRTK atau tidak.
  • Jika pesan mengatakan bahwa aset belum diintegrasikan:
    • Pastikan Modul Leap Motion Unity ada dalam proyek
    • Pastikan versi yang ditambahkan didukung, lihat tabel di bagian atas halaman untuk versi yang didukung.
    • Coba Mixed Reality Toolkit > Utilities > Leap Motion > Integrasikan Modul Leap Motion Unity

Gagal menyalin HLAPI Multipemain rakitan

Pada impor Aset Inti Unity Gerak Leap, kesalahan ini mungkin dicatat:

Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed

Solusi

  • Solusi jangka pendek adalah memulai ulang Unity. Lihat Masalah 7761 untuk informasi selengkapnya.

Adegan Contoh Gerakan Lompat

Contoh adegan menggunakan profil DefaultLeapMotionConfiguration dan menentukan apakah proyek Unity telah dikonfigurasi dengan benar untuk menggunakan Penyedia Data Gerakan Leap.

Contoh adegan terkandung dalam paket Microsoft.MixedReality.Toolkit.Examples di direktori MRTK/Examples/Demos/HandTracking/ .

Lihat juga