Activer la lampe de poche du téléphone depuis le jeu dans Unity

Dans ce tutoriel, nous allons découvrir comment contrôler la lampe de poche (torche) sur un appareil mobile directement depuis un jeu Unity en utilisant des API spécifiques à la plateforme via des plugins. Cette fonctionnalité peut améliorer l'immersion dans le jeu ou fournir une utilité au sein de votre application.

Installation

Avant de vous lancer dans le code, assurez-vous d'avoir un appareil mobile avec une lampe de poche (la plupart des smartphones disposent de cette fonctionnalité). Assurez-vous également d'avoir installé Unity et d'avoir une compréhension de base des scripts C#.

Étapes de mise en œuvre

Étape 1: Créer un plugin natif

Nous allons créer un plugin natif pour iOS et Android pour accéder à leurs API de lampe de poche respectives.

For Android (Java)

Créez une classe Java qui interagit avec l’API de lampe de poche 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)

Créez une classe Objective-C ou Swift qui interagit avec l’API de lampe de poche 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

Étape 2: Unity Script C#

Créez un script C# dans Unity pour appeler ces fonctions natives à l’aide d’une compilation conditionnelle spécifique à la plate-forme.

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;
    }
}

Étape 3: Intégration et tests

Attachez le script FlashlightController à un GameObject dans votre scène Unity. Testez la fonctionnalité en appuyant sur la touche désignée (dans ce cas, 'F') pour allumer et éteindre la lampe de poche. Assurez-vous de créer et de déployer les plugins natifs sur vos appareils cibles.

Conclusion

Vous avez maintenant appris à contrôler la lampe de poche sur un appareil mobile directement depuis un jeu Unity à l'aide d'API spécifiques à la plateforme via des plugins. Cette approche vous permet d'intégrer de manière transparente des fonctionnalités spécifiques à l'appareil dans vos projets Unity, améliorant ainsi à la fois le gameplay et l'utilité pour vos utilisateurs.