Habilitar lanterna do telefone no jogo no Unity

Neste tutorial, exploraremos como controlar a lanterna (tocha) em um dispositivo móvel diretamente de um jogo Unity usando APIs específicas da plataforma por meio de plugins. Essa funcionalidade pode aprimorar a imersão do jogo ou fornecer utilidade dentro do seu aplicativo.

Configurar

Antes de mergulhar no código, certifique-se de ter um dispositivo móvel com uma lanterna (a maioria dos smartphones tem esse recurso). Além disso, certifique-se de ter Unity instalado e um entendimento básico de scripts em C#.

Etapas de implementação

Etapa 1: Crie um plugin nativo

Criaremos um plugin nativo para iOS e Android para acessar suas respectivas APIs de lanterna.

For Android (Java)

Crie uma classe Java que interaja com a API de lanterna do 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)

Crie uma classe Objective-C ou Swift que interaja com a API de lanterna do 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

Etapa 2: Unity Script C#

Crie um script C# em Unity para chamar essas funções nativas usando compilação condicional específica da 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;
    }
}

Etapa 3: Integração e Teste

Anexe o script FlashlightController a um GameObject na sua cena Unity. Teste a funcionalidade pressionando a tecla designada (neste caso, 'F') para ligar e desligar a lanterna. Certifique-se de construir e implementar os plugins nativos nos seus dispositivos de destino.

Conclusão

Agora você aprendeu como controlar a lanterna em um dispositivo móvel diretamente de dentro de um jogo Unity usando APIs específicas da plataforma por meio de plugins. Essa abordagem permite que você integre recursos específicos do dispositivo perfeitamente em seus projetos Unity, aprimorando tanto a jogabilidade quanto a utilidade para seus usuários.