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