Inżynieria

Odczytywanie oddechów w Unity

Author avatar

Jakub Domaszewicz

Ostatnia aktualizacja25 lipca 2026

Odczytywanie oddechów w Unity

Połącz Aidlab Unity SDK 2.5.0 z projektem Unity 6 na Androidzie. Android korzysta teraz z tego samego Aidlab.AidlabSDK, sygnałów i API synchronizacji co pozostałe platformy Unity.

W tym poradniku połączysz telefon lub tablet z Androidem z Aidlabem za pomocą Unity. Na koniec sześcian w scenie będzie poruszał się zgodnie z sygnałem oddechowym odbieranym na żywo.

Zaktualizowano w lipcu 2026 r. dla Aidlab Unity SDK 2.5.0, Unity 6.5 i aktualnego modelu uprawnień Bluetooth w Androidzie.

Zakładamy, że znasz już podstawy edytora Unity. Jeśli dopiero zaczynasz, skorzystaj najpierw z kursu wprowadzającego Unity.

Przygotowanie projektu

1. Utwórz nowy projekt Unity:

Tworzenie projektu

2. Utwórz pustą scenę, dodaj ją do profilu kompilacji i wybierz Android jako platformę docelową:

Wybór platformy Android w ustawieniach kompilacji

3. Pobierz Aidlab Unity SDK 2.5.0, a następnie wybierz Assets → Import Package → Custom Package... i zaimportuj wszystkie pliki.

4. Utwórz obiekt Cube, dodaj do projektu pokazany poniżej skrypt AidlabRespiration i przypisz go do obiektu Main Camera. Scena powinna wyglądać tak:

Scena z sześcianem i kamerą

5. W Project Settings → Player → Android → Other Settings ustaw Minimum API Level na Android 9 (API 28) lub nowszy:

Ustawienie minimalnego poziomu API

6. Podłącz urządzenie z Androidem, wybierz Build and Run i udziel aplikacji uprawnień do Bluetooth, gdy poprosi o nie system. Na Androidzie 11 i starszych wersjach system prosi o dostęp do lokalizacji, ponieważ tego uprawnienia wymagało wyszukiwanie urządzeń BLE.

Aplikacja uruchomiona na Androidzie

7. Sprawdź, czy Bluetooth jest włączony, uruchom Aidlaba i załóż go. Po uzyskaniu uprawnień AidlabSDK wyszukuje urządzenia i łączy się z tym o wskazanej nazwie.

Jedno API na wszystkich platformach Unity

Android korzysta z tego samego punktu wejścia Aidlab.AidlabSDK i delegatów sygnałów co iOS, macOS i Windows. Implementacja dla Androida samodzielnie obsługuje wymagane uprawnienia oraz komunikację z kodem Java/Kotlin:

using Aidlab;
using UnityEngine;

public sealed class AidlabRespiration : MonoBehaviour
{
    private AidlabSDK sdk;
    private float currentRespirationSample;

    private void Start()
    {
        AidlabSDK.init("Aidlab");
        sdk = FindAnyObjectByType<AidlabSDK>();
        sdk.SetCollectSignals(
            new[] { Signal.Respiration },
            System.Array.Empty<Signal>()
        );
        AidlabSDK.aidlabDelegate.respiration.Subscribe(OnRespiration);
    }

    private void OnDestroy()
    {
        AidlabSDK.aidlabDelegate.respiration.Unsubscribe(OnRespiration);
    }

    private void OnRespiration()
    {
        currentRespirationSample = AidlabSDK.aidlabDelegate.respiration.value;
    }

    private void Update()
    {
        var cube = GameObject.Find("Cube");
        if (cube == null)
            return;

        Vector3 position = cube.transform.position;
        position.y = Mathf.Clamp(currentRespirationSample * 10, -4, 4);
        cube.transform.position = position;
    }
}

Android 12 i nowsze wersje wymagają uprawnień BLUETOOTH_SCAN oraz BLUETOOTH_CONNECT. Android 11 i starsze wersje korzystają z uprawnienia do dokładnej lokalizacji podczas wyszukiwania urządzeń BLE. SDK prosi o odpowiednie uprawnienie przed rozpoczęciem wyszukiwania. Aplikacja nie może samodzielnie włączyć Bluetooth bez udziału użytkownika, dlatego poproś go o włączenie go w ustawieniach lub oknie dialogowym systemu.

Te same delegaty udostępniają na wszystkich platformach docelowych Unity: EKG, temperaturę skóry, dane ruchowe, tętno, odstępy RR, aktywność, ciśnienie, EDA, GPS, postęp synchronizacji i zapisane próbki. W kodzie produkcyjnym przechowuj referencję do obiektu sceny, zamiast wywoływać GameObject.Find w każdej klatce. Dodaj też obsługę zdarzeń Connected, Disconnected i ErrorReceived.