Bật đèn pin điện thoại từ trò chơi trong Unity

Trong hướng dẫn này, chúng ta sẽ khám phá cách điều khiển đèn pin (torch) trên thiết bị di động trực tiếp từ trò chơi Unity bằng API dành riêng cho nền tảng thông qua plugin. Chức năng này có thể tăng cường sự đắm chìm trong trò chơi hoặc cung cấp tiện ích trong ứng dụng của bạn.

Cài đặt

Trước khi bắt đầu viết code, hãy đảm bảo bạn có thiết bị di động có đèn pin (hầu hết điện thoại thông minh đều có tính năng này). Ngoài ra, hãy đảm bảo bạn đã cài đặt Unity và có hiểu biết cơ bản về tập lệnh C#.

Các bước thực hiện

Bước 1: Tạo một Plugin gốc

Chúng tôi sẽ tạo một plugin gốc cho cả iOS và Android để truy cập vào API đèn pin tương ứng.

For Android (Java)

Tạo một lớp Java tương tác với API đèn pin 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)

Tạo lớp Objective-C hoặc Swift tương tác với API đèn pin 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

Bước 2: Unity Viết kịch bản C#

Tạo một tập lệnh C# trong Unity để gọi các hàm gốc này bằng cách sử dụng biên dịch có điều kiện dành riêng cho nền tảng.

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

Bước 3: Tích hợp và Kiểm tra

Đính kèm tập lệnh FlashlightController vào GameObject trong cảnh Unity của bạn. Kiểm tra chức năng bằng cách nhấn phím được chỉ định (trong trường hợp này là 'F') để bật và tắt đèn pin. Đảm bảo xây dựng và triển khai các plugin gốc cho các thiết bị mục tiêu của bạn.

Phần kết luận

Bây giờ bạn đã học cách điều khiển đèn pin trên thiết bị di động trực tiếp từ trong trò chơi Unity bằng API dành riêng cho nền tảng thông qua plugin. Phương pháp này cho phép bạn tích hợp các tính năng dành riêng cho thiết bị một cách liền mạch vào các dự án Unity của mình, nâng cao cả lối chơi và tiện ích cho người dùng.