Для реализации выбора COM-порта через выпадающее меню в Unity, вам понадобится выполнить несколько шагов. Вы можете использовать класс `SerialPort` из пространства имен `System.IO.Ports` для работы с COM-портами. Далее будет представлена упрощенная версия, как это можно реализовать в Unity.
### Шаги для реализации:
1. **Создайте интерфейс пользователя**:
- Создайте Canvas в сцене.
- Добавьте Dropdown для выбора COM-порта.
- Добавьте несколько кнопок для отправки данных через COM-порт.
2. **Скрипт для работы с COM-портами**:
Вам потребуется создать скрипт для управления COM-портами и отправкой данных. Вот пример кода:
```csharp
using UnityEngine;
using UnityEngine.UI;
using System.IO.Ports;
using System.Collections.Generic;
public class SerialPortManager : MonoBehaviour
{
public Dropdown portDropdown;
public Button sendButtonA;
public Button sendButtonB;
private SerialPort serialPort;
void Start()
{
// Заполнитеdropdown доступными COM-портами
List<string> portNames = new List<string>(SerialPort.GetPortNames());
portDropdown.AddOptions(portNames);
// Подписка на событие изменения выбора в dropdown
portDropdown.onValueChanged.AddListener(OnPortSelected);
// Подписка на события кнопок
sendButtonA.onClick.AddListener(() => SendData("A"));
sendButtonB.onClick.AddListener(() => SendData("B"));
}
void OnPortSelected(int index)
{
// Закрытие порта, если ранее он был открыт
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Close();
}
// Открытие нового порта
string selectedPort = portDropdown.options[index].text;
serialPort = new SerialPort(selectedPort, 9600); // Установите скорость порта
serialPort.Open();
}
void SendData(string data)
{
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Write(data);
Debug.Log($"Sent: {data}");
}
else
{
Debug.LogError("Serial port is not open!");
}
}
void OnApplicationQuit()
{
// Закрытие порта при выходе
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Close();
}
}
}
```
### Инструкции по работе с кодом:
- **Dropdown**: Передайте ваш экземпляр Dropdown из Unity в поле `portDropdown` в инспекторе. Это гарантирует, что скрипт сможет получать доступ к вашим вариантам COM-портов.
- **Кнопки**: Аналогично, свяжите ваши кнопки с методами отправки данных. В примере выше при нажатии кнопки будет отправлена буква "A" или "B" в зависимости от кнопки.
### Обратите внимание:
- Убедитесь, что в вашей сборке Unity включен доступ к `System.IO.Ports`. Это может требовать дополнительные настройки в зависимости от используемой платформы.
- Не забудьте подключить ваше Arduino устройство и установить его скорость передачи данных (Baud Rate) на ту же величину, что и в Unity.
- Для тестирования вы можете использовать Serial Monitor в Arduino IDE, чтобы убедиться, что ваши данные поступают корректно.
### Заключение
Данный подход позволяет вам динамически выбирать доступные COM-порты и отправлять данные по выбранному порту. Этот код является базовой реализацией, и его можно расширять в зависимости от ваших конкретных потребностей и функций.