Включить фонарик на телефоне из игры в Unity

В этом уроке мы рассмотрим, как управлять фонариком (torch) на мобильном устройстве непосредственно из игры 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, улучшая как игровой процесс, так и полезность для ваших пользователей.