Activați lanterna telefonului din joc în Unity

În acest tutorial, vom explora cum să controlăm lanterna (torță) pe un dispozitiv mobil direct dintr-un joc Unity folosind API-uri specifice platformei prin plugin-uri. Această funcționalitate poate îmbunătăți imersiunea în joc sau poate oferi utilitate în aplicația dvs.

Înființat

Înainte de a vă scufunda în cod, asigurați-vă că aveți un dispozitiv mobil cu lanternă (majoritatea smartphone-urilor au această funcție). De asemenea, asigurați-vă că aveți instalat Unity și o înțelegere de bază a scripturilor C#.

Etape de implementare

Pasul 1: Creați un plugin nativ

Vom crea un plugin nativ atât pentru iOS, cât și pentru Android, pentru a accesa API-urile lanternei respective.

For Android (Java)

Creați o clasă Java care interacționează cu API-ul lanternă 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)

Creați o clasă Objective-C sau Swift care interacționează cu API-ul lanternă 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

Pasul 2: Unity C# Scripting

Creați un script C# în Unity pentru a apela aceste funcții native folosind compilarea condiționată specifică platformei.

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

Pasul 3: Integrare și testare

Atașați scriptul FlashlightController la un GameObject din scena dvs. Unity. Testați funcționalitatea apăsând tasta desemnată (în acest caz, 'F') pentru a porni și opri lanterna. Asigurați-vă că construiți și implementați pluginurile native pe dispozitivele dvs. țintă.

Concluzie

Acum ați învățat cum să controlați lanterna pe un dispozitiv mobil direct dintr-un joc Unity folosind API-uri specifice platformei prin pluginuri. Această abordare vă permite să integrați fără probleme funcții specifice dispozitivului în proiectele dvs. Unity, îmbunătățind atât jocul, cât și utilitatea pentru utilizatori.