Unity のゲームから携帯電話のフラッシュライトを有効にする

このチュートリアルでは、プラグインを通じてプラットフォーム固有の API を使用して、Unity ゲームからモバイル デバイスの懐中電灯 (トーチ) を直接制御する方法を説明します。この機能により、ゲームプレイの没入感を高めたり、アプリ内での利便性を提供したりできます。

設定

コードに取り掛かる前に、懐中電灯付きのモバイル デバイスがあることを確認してください (ほとんどのスマートフォンにはこの機能があります)。また、Unity がインストールされており、C# スクリプトの基本を理解していることを確認してください。

実装手順

ステップ1: ネイティブプラグインを作成する

iOS と Android の両方にネイティブ プラグインを作成し、それぞれの懐中電灯 API にアクセスできるようにします。

For Android (Java)

Android フラッシュライト API と対話する Java クラスを作成します。

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 フラッシュライト API と対話する Objective-C または Swift クラスを作成します。

#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# スクリプト

プラットフォーム固有の条件付きコンパイルを使用してこれらのネイティブ関数を呼び出すには、Unity に C# スクリプトを作成します。

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 スクリプトを Unity シーンの GameObject にアタッチします。指定されたキー (この場合は 'F') を押して懐中電灯のオン/オフを切り替えて機能をテストします。ネイティブ プラグインをビルドして、ターゲット デバイスにデプロイしてください。

結論

これで、プラグインを介してプラットフォーム固有の API を使用して、Unity ゲーム内から直接モバイル デバイスの懐中電灯を制御する方法を学びました。このアプローチにより、デバイス固有の機能を Unity プロジェクトにシームレスに統合し、ゲームプレイとユーザーの利便性の両方を向上させることができます。