Habilitar la linterna del teléfono desde el juego en Unity

En este tutorial, exploraremos cómo controlar la linterna en un dispositivo móvil directamente desde un juego Unity utilizando API específicas de la plataforma a través de complementos. Esta funcionalidad puede mejorar la inmersión en el juego o brindar utilidad dentro de su aplicación.

Configuración

Antes de sumergirte en el código, asegúrate de tener un dispositivo móvil con linterna (la mayoría de los teléfonos inteligentes tienen esta función). Además, asegúrate de tener Unity instalado y de tener conocimientos básicos de programación en C#.

Pasos de implementación

Paso 1: Crear un complemento nativo

Crearemos un complemento nativo para iOS y Android para acceder a sus respectivas API de linterna.

For Android (Java)

Cree una clase Java que interactúe con la API de linterna de 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)

Cree una clase Objective-C o Swift que interactúe con la API de linterna de 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

Paso 2: Unity Creación de scripts en C#

Cree un script de C# en Unity para llamar a estas funciones nativas usando la compilación condicional específica de la plataforma.

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

Paso 3: Integración y pruebas

Adjunte el script FlashlightController a un GameObject en su escena Unity. Pruebe la funcionalidad presionando la tecla designada (en este caso, 'F') para encender y apagar la linterna. Asegúrese de compilar e implementar los complementos nativos en sus dispositivos de destino.

Conclusión

Ahora aprendiste a controlar la linterna en un dispositivo móvil directamente desde un juego Unity usando API específicas de la plataforma a través de complementos. Este enfoque te permite integrar funciones específicas del dispositivo sin problemas en tus proyectos Unity, lo que mejora tanto la jugabilidad como la utilidad para tus usuarios.