Việc hỗ trợ nhiều người chơi là xu hướng tất yếu hiện nay của nhiều game. Thông thường, những người chơi được kết nối với nhau thông qua mạng Internet hay mạng nội bộ (mạng LAN). Tuy nhiên trong 1 số trường hợp các kết nối mạng không khả dụng. Ví dụ như thiết bị đang kết nối với thiết bị khác hay đôi khi chỉ cần sự đơn giản trong việc kết nối 2 thiết bị với nhau.
Lúc này, Bluetooth là giải pháp phù hợp để giải quyết tình trạng người chơi không thể giao tiếp với dựa trên các kết nối mạng thông thường.
Bài viết sử dụng Bluetooth LE for iOS and Android.
Công nghệ Bluetooth
Bluetooth được phát hành vào năm 1999 do công ty Sony Erricson phát triển trong thời kì đầu. Bluetooth có chuẩn là IEEE 802.15.1. Bluetooth có thể đạt tốc độ 1Mb/s và sử dụng giải tần 2,4 GHz.
Bluetooth có thể tạo ra 1 mạng lưới không dây giữa các thiết bị như laptop, smartphone. Kết nối giữa các thiết bị input, output như mouse, keyboard, printer.
Máy chơi game WII cũng như console Playstation 3 cũng vẫn sử dụng loại kết nối này.
Phiên bản mới nhất hiện nay của Bluetooth là 4.0 gọi là Bluetooth Smart/Bluetooth low energy, tuy loại này không có kết nối tốc độ cao như 3.0 nhưng điện năng tiêu thụ rất thấp, thường được sử dụng cho các thiết bị điều khiển như remote TV, máy tính bảng, smartphone.
Bluetooth với Unity
Các hàm dưới đây được cung cấp trong package Bluetooth LE for iOS and Android v2.3.unitypackage là 1 package có tính phí của Unity.
Nên trong bài viết này chỉ cung cấp các phương thức để giao tiếp Bluetooth giữa các thiết bị, chứ không cung cấp project.
Log
Cú pháp
public static void Log (string message)
Chức năng
Hiển thị 1 chuỗi(message) lên màn hình console.
Initialize
Cú pháp
public static BluetoothDeviceScript Initialize (bool asCentral, bool asPeripheral, Action action, Action<string> errorAction)
Chức năng
Khởi tạo 1 hệ thống Bluetooth. Hệ thống có thể hoạt động như 1 Central (tương tự như server để các thiết bị khác có thể kết nối tới) hay như 1 Peripheral (Client kết nối tới Server có sẵn) hoặc cả 2 dựa vào các tham số asCentral
, asPeripheral
.
Khi hoàn thành việc khởi tạo thì action sẽ được thực thi. Nếu có 1 error thì errorAction
sẽ được gọi và thực thi.
DeInitialize
Cú pháp
public static void DeInitialize (Action action)
Chức năng
Hành động này là hủy khởi tạo và thường được gọi khi các tắt ứng dụng hoặc ngắt kết nối Bluetooth. Khi quá trình hoàn thành thì action sẽ được gọi và thực thi.
FinishDeInitialize
Cú pháp
public static void FinishDeInitialize ()
Chức năng
Phương thức sẽ tự động được gọi bởi BluetoothDeviceScript
khi mà Bluetooth được hủy.
PauseMessages
Cú pháp
public static void PauseMessages (bool isPaused)
Chức năng
Phương thức giúp thông báo cho các hệ thống Bluetooth rằng các ứng dụng nào sẽ được tạm dừng hoặc tiếp tục thực thi dựa vào tham số isPaused
.
ScanForPeripheralsWithServices
Cú pháp
public static void ScanForPeripheralsWithServices (string[] serviceUUIDs, Action<string , string> action, Action<string, int, byte[]> actionAdvertisingInfo)
Chức năng
Phương thức sẽ đặt thiết bị vào chế độ tìm tất cả các thiết bị. serviceUUIDs
chính là tham số hỗ trợ tìm các Peripheral, nếu giá trị của serviceUUIDs
là NULL
thì tất cả các Bluetooth LE Peripheral sẽ được tìm thấy. Nếu 1 thiết bị được tìm thấy thì action sẽ được gọi với ID và tên của thiết bị vừa được tìm thấy.
StopScan
Cú pháp
public static void StopScan ()
Chức năng
Phương thức này cho phép dừng chế độ tìm quét các thiết bị bằng phương thức ScanForPeripheralsWithServices
.
RetrieveListOfPeripheralsWithServices
Cú pháp
public static void RetrieveListOfPeripheralsWithServices (string[] serviceUUIDs, Action <string, string> action)
Chức năng
Phương thức này sẽ lấy về 1 danh sách các thiết bị đang được kết nối tới hệ thống Bluetooth.
ConnectToPeripheral
Cú pháp
public static void ConnectToPeripheral (string name, Action<string> connectAction, Action<string, string> serviceAction, Action<string, string, string> characteristicAction, Action<string> disconnectAction)
Chức năng
Phương thức này giúp thiết bị cố gắng kết nối tới các thiết bị ngoại vi đã được đặt tên. Nếu kết nối thành công thì connectAction
sẽ được gọi cho mỗi dịch vụ thiết bị.
- Giá trị mặc định cho tham số
disconnectAction
lànull
và có khả năng tương thích ngược. - Nếu cung cấp 1 callback cho tham số này nó sẽ được gọi bất cứ khi nào kết nối ngắt kết nối thiết bị.
Chú ý: Nếu cung cấp 1 callback cho phương thức DisconnectPeripheral
thì cả 2 callbacks đều sẽ được gọi tới.
DisconnectPeripheral
Cú pháp
public static void DisconnectPeripheral (string name, Action<string> action)
Chức năng
Phương pháp này sẽ ngắt kết nối tới 1 thiết bi theo tên. Khi ngắt kết nối hoàn tất thì callback function được gọi với dữ liệu đi kèm là ID của thiết bị.
ReadCharacteristic
Cú pháp
public static void ReadCharacteristic (string name, string service, string characteristic, Ac tion<byte[]> action)
Chức năng
Phương pháp này sẽ bắt đầu đọc 1 đặc tính bằng cách sử dụng tên của các thiết bị ngoại vi mà nó kết nối đến. Nếu đọc là thành công callback funtion sẽ được gọi cùng với đó là các dữ liệu có kiểu dữ liệu là byte.
WriteCharacteristic
Cú pháp
public static void WriteCharacteristic (string name, string service, string characteristic, by te[] data, int length, bool withResponse, Action<string> action)
Chức năng
Phương pháp này sẽ truyền dữ liệu tới các thiết bị ngoại vi đã được kết nối trước đó thông qua name
, service
. Giá trị để truyền là 1 bộ đệm byte với chiều dài chỉ định trong các thông số dữ liệu và thời gian.
Các tham số withResponse là các action được trả về sau khi truyền dữ liệu thành công hoặc không thành công.
SubscribeCharacteristic
Cú pháp
public static void SubscribeCharacteristic (string name, string service, string characteristi c, Action<string> notificationAction, Action< string, byte[]> action)
Chức năng
Phương pháp này sẽ đăng ký với thiết bị ngoại vi theo tên, các dịch vụ và đặc điểm. Phương thức notificationAction
được gọi bất cứ khi nào có sự thay cập nhật những data từ các thiết bị có kết nối bluetooth.
- Tham số đầu tiên là UUID.
- Tham số thứ 2 là các byte dữ liệu thô đã được cập nhật. Phương pháp này là tương thích ngược.
SubscribeCharacteristicWithDeviceAddress
Cú pháp
public static void SubscribeCharacteristicWithDeviceAddress (string name, string service , string characteristic, Action<string, string> notificationAction, Action<string, string, byte[]> action
Chức năng
Phương pháp này sẽ đăng ký với 1 đặc trưng theo tên của thiết bị ngoại vi và các dịch vụ và đặc trưng. Sau notificationAction
thì hàm callback
được gọi khi thông báo xảy ra là các data được cập nhật bởi các thiết bị ngoại vi.
- Tham số đầu tiên là địa chỉ thiết bị.
- Tham số thứ 2 là
UUID
. - Tham số thứ 3 là các byte dữ liệu thô đã được cập nhật.
UnSubscribeCharacteristic
Cú pháp
public static void UnSubscribeCharacteristic (string name, string service, string characteristic, Action<string> action)
Chức năng
Phương pháp này là hủy đăng ký các đặc tính của bluetooth theo tên, dịch vụ và đặc điểm. Khi hoàn thành thì các callback function được thực thi.