Aktivera telefonficklampa från Game in Unity
I den här handledningen kommer vi att utforska hur man styr ficklampan (facklan) på en mobil enhet direkt från ett Unity-spel med hjälp av plattformsspecifika API:er via plugins. Den här funktionen kan förbättra spelets fördjupning eller tillhandahålla användbarhet i din app.
Uppstart
Innan du dyker in i kod, se till att du har en mobil enhet med en ficklampa (de flesta smartphones har den här funktionen). Se också till att du har Unity installerat och en grundläggande förståelse för C#-skript.
Implementeringssteg
Steg 1: Skapa en inbyggd plugin
Vi kommer att skapa en inbyggd plugin för både iOS och Android för att komma åt deras respektive ficklamps-API:er.
For Android (Java)Skapa en Java-klass som interagerar med Android Flashlight 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)Skapa en Objective-C- eller Swift-klass som interagerar med iOS ficklampa 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
Steg 2: Unity C#-skript
Skapa ett C#-skript i Unity för att anropa dessa inbyggda funktioner med plattformsspecifik villkorlig 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;
}
}
Steg 3: Integration och testning
Fäst FlashlightController
-skriptet till ett GameObject i din Unity-scen. Testa funktionen genom att trycka på den avsedda knappen (i det här fallet 'F') för att slå på och av ficklampan. Se till att bygga och distribuera de inbyggda plugins till dina målenheter.
Slutsats
Du har nu lärt dig hur du styr ficklampan på en mobil enhet direkt från ett Unity-spel med hjälp av plattformsspecifika API:er via plugins. Detta tillvägagångssätt låter dig integrera enhetsspecifika funktioner sömlöst i dina Unity-projekt, vilket förbättrar både spelandet och användbarheten för dina användare.