Увімкніть телефонний ліхтарик із гри в Unity

У цьому підручнику ми розглянемо, як керувати ліхтариком (ліхтариком) на мобільному пристрої безпосередньо з гри Unity, використовуючи API для певної платформи через плагіни. Ця функція може покращити занурення в ігровий процес або надати корисність у вашій програмі.

Налаштування

Перш ніж зануритися в код, переконайтеся, що у вас є мобільний пристрій із ліхтариком (більшість смартфонів мають цю функцію). Також переконайтеся, що у вас встановлено Unity і ви маєте базове розуміння C# сценаріїв.

Етапи реалізації

Крок 1: Створіть власний плагін

Ми створимо нативний плагін для iOS і Android для доступу до відповідних API ліхтариків.

For Android (Java)

Створіть клас Java, який взаємодіє з API ліхтарика 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)

Створіть клас Objective-C або Swift, який взаємодіє з API ліхтарика 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

Крок 2: Unity Сценарії C#

Створіть сценарій C# у Unity для виклику цих власних функцій за допомогою умовної компіляції для конкретної платформи.

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

Крок 3: Інтеграція та тестування

Приєднайте сценарій FlashlightController до GameObject у вашій сцені Unity. Перевірте функціональність, натиснувши призначену клавішу (в даному випадку 'F'), щоб увімкнути та вимкнути ліхтарик. Переконайтеся, що створили та розгорнули рідні плагіни на ваших цільових пристроях.

Висновок

Тепер ви дізналися, як керувати ліхтариком на мобільному пристрої безпосередньо з гри Unity за допомогою API-інтерфейсів для певної платформи через плагіни. Цей підхід дозволяє легко інтегрувати особливості пристрою у ваші проекти Unity, покращуючи як ігровий процес, так і корисність для ваших користувачів.