Unity'de Oyundan Telefon El Fenerini Etkinleştirme

Bu eğitimde, eklentiler aracılığıyla platforma özgü API'leri kullanarak bir Unity oyunundan doğrudan mobil cihazdaki el fenerini (meşale) nasıl kontrol edeceğinizi keşfedeceğiz. Bu işlevsellik, oyuna dalmayı artırabilir veya uygulamanızda yardımcı olabilir.

Kurmak

Kodlamaya dalmadan önce, el feneri olan bir mobil cihazınız olduğundan emin olun (çoğu akıllı telefonda bu özellik bulunur). Ayrıca, Unity'in yüklü olduğundan ve C# betikleme konusunda temel bir anlayışa sahip olduğunuzdan emin olun.

Uygulama Adımları

Adım 1: Yerel bir Eklenti Oluşturun

Hem iOS hem de Android için kendi el feneri API'lerine erişebilecekleri yerel bir eklenti oluşturacağız.

For Android (Java)

Android el feneri API'siyle etkileşime giren bir Java sınıfı oluşturun.

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)

iOS el feneri API'siyle etkileşim kuran bir Objective-C veya Swift sınıfı oluşturun.

#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

Adım 2: Unity C# Komut Dosyası

Platforma özgü koşullu derlemeyi kullanarak bu yerel fonksiyonları çağırmak için Unity'de bir C# betiği oluşturun.

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

Adım 3: Entegrasyon ve Test

FlashlightController betiğini Unity sahnenizdeki bir GameObject'e ekleyin. El fenerini açıp kapatmak için belirtilen tuşa (bu durumda 'F') basarak işlevselliği test edin. Yerel eklentileri hedef cihazlarınıza oluşturup dağıttığınızdan emin olun.

Çözüm

Artık bir Unity oyunundan doğrudan eklentiler aracılığıyla platforma özgü API'leri kullanarak mobil bir cihazdaki el fenerini nasıl kontrol edeceğinizi öğrendiniz. Bu yaklaşım, cihaza özgü özellikleri Unity projelerinize sorunsuz bir şekilde entegre etmenizi sağlayarak kullanıcılarınız için hem oynanabilirliği hem de faydayı artırır.