Aktiver telefonlommelykt fra Game in Unity

I denne opplæringen skal vi utforske hvordan du kontrollerer lommelykten (fakkelen) på en mobilenhet direkte fra et Unity-spill ved å bruke plattformspesifikke APIer gjennom plugins. Denne funksjonaliteten kan forbedre innlevelse i spillet eller gi nytte i appen din.

Oppsett

Før du dykker inn i koden, sørg for at du har en mobilenhet med lommelykt (de fleste smarttelefoner har denne funksjonen). Sørg også for at du har Unity installert og en grunnleggende forståelse av C#-skripting.

Implementeringstrinn

Trinn 1: Opprett en Native Plugin

Vi lager en innebygd plugin for både iOS og Android for å få tilgang til deres respektive lommelykt-API-er.

For Android (Java)

Lag en Java-klasse som samhandler med Android lommelykt API.

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)

Lag en Objective-C- eller Swift-klasse som samhandler med iOS lommelykt-API.

#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

Trinn 2: Unity C#-skripting

Lag et C#-skript i Unity for å kalle disse native funksjonene ved å bruke plattformspesifikk betinget kompilering.

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

Trinn 3: Integrasjon og testing

Fest FlashlightController-skriptet til et GameObject i Unity-scenen din. Test funksjonaliteten ved å trykke på den angitte tasten (i dette tilfellet 'F') for å slå lommelykten av og på. Sørg for å bygge og distribuere de native plugins til målenhetene dine.

Konklusjon

Du har nå lært hvordan du kontrollerer lommelykten på en mobilenhet direkte fra et Unity-spill ved å bruke plattformspesifikke APIer gjennom plugins. Denne tilnærmingen lar deg integrere enhetsspesifikke funksjoner sømløst i Unity-prosjektene dine, noe som forbedrer både spilling og nytte for brukerne dine.