Włącz latarkę telefonu z gry w Unity

W tym samouczku pokażemy, jak sterować latarką (torch) na urządzeniu mobilnym bezpośrednio z gry Unity, używając interfejsów API specyficznych dla platformy za pośrednictwem wtyczek. Ta funkcjonalność może zwiększyć immersję w rozgrywce lub zapewnić użyteczność w Twojej aplikacji.

Organizować coś

Zanim zagłębisz się w kod, upewnij się, że masz urządzenie mobilne z latarką (większość smartfonów ma tę funkcję). Upewnij się również, że masz zainstalowany Unity i podstawową wiedzę na temat skryptów C#.

Etapy wdrażania

Krok 1: Utwórz wtyczkę natywną

Stworzymy natywną wtyczkę dla systemów iOS i Android umożliwiającą dostęp do interfejsów API latarek.

For Android (Java)

Utwórz klasę Java, która będzie współpracować z interfejsem API latarki Android.

package com.example.flashlight;

import android.content.Context;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;

public class Flashlight {

    private Context context;
    private CameraManager cameraManager;
    private String cameraId;

    public Flashlight(Context context) {
        this.context = context;
        cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
        try {
            cameraId = cameraManager.getCameraIdList()[0];
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

    public void enableFlashlight() {
        try {
            cameraManager.setTorchMode(cameraId, true);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

    public void disableFlashlight() {
        try {
            cameraManager.setTorchMode(cameraId, false);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
}
For iOS (Objective-C/Swift)

Utwórz klasę Objective-C lub Swift, która będzie współpracować z interfejsem API latarki iOS.

#import <AVFoundation/AVFoundation.h>

@interface Flashlight : NSObject

- (void)enableFlashlight;
- (void)disableFlashlight;

@end

@implementation Flashlight

- (void)enableFlashlight {
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if ([device hasTorch] && [device isTorchAvailable]) {
        [device lockForConfiguration:nil];
        [device setTorchMode:AVCaptureTorchModeOn];
        [device unlockForConfiguration];
    }
}

- (void)disableFlashlight {
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if ([device hasTorch]) {
        [device lockForConfiguration:nil];
        [device setTorchMode:AVCaptureTorchModeOff];
        [device unlockForConfiguration];
    }
}

@end

Krok 2: Unity Skrypty C#

Utwórz skrypt C# w Unity, aby wywołać te natywne funkcje za pomocą kompilacji warunkowej specyficznej dla platformy.

using UnityEngine;

public class FlashlightController : MonoBehaviour
{
    private static Flashlight flashlight;

    void Start()
    {
        flashlight = new Flashlight();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.F))
        {
            ToggleFlashlight();
        }
    }

    void ToggleFlashlight()
    {
        if (IsFlashlightOn())
        {
            flashlight.DisableFlashlight();
        }
        else
        {
            flashlight.EnableFlashlight();
        }
    }

    bool IsFlashlightOn()
    {
        // Implement check for flashlight state based on platform-specific logic
        return false;
    }
}

Krok 3: Integracja i testowanie

Dołącz skrypt FlashlightController do GameObject w swojej scenie Unity. Przetestuj funkcjonalność, naciskając wyznaczony klawisz (w tym przypadku 'F'), aby włączać i wyłączać latarkę. Upewnij się, że zbudujesz i wdrożysz natywne wtyczki na swoich urządzeniach docelowych.

Wniosek

Teraz nauczyłeś się, jak kontrolować latarkę na urządzeniu mobilnym bezpośrednio z gry Unity, używając specyficznych dla platformy interfejsów API za pośrednictwem wtyczek. To podejście pozwala na bezproblemową integrację funkcji specyficznych dla urządzenia z projektami Unity, zwiększając zarówno rozgrywkę, jak i użyteczność dla użytkowników.