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# 스크립팅

플랫폼별 조건부 컴파일을 사용하여 이러한 네이티브 함수를 호출하는 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 스크립트를 Unity 장면의 GameObject에 연결합니다. 지정된 키(이 경우 'F')를 눌러 손전등을 켜고 끄는 방식으로 기능을 테스트합니다. 대상 기기에 네이티브 플러그인을 빌드하고 배포해야 합니다.

결론

이제 플러그인을 통해 플랫폼별 API를 사용하여 Unity 게임 내에서 모바일 기기의 손전등을 직접 제어하는 ​​방법을 배웠습니다. 이 접근 방식을 사용하면 기기별 기능을 Unity 프로젝트에 원활하게 통합하여 사용자의 게임 플레이와 유용성을 모두 향상시킬 수 있습니다.