public class CommandSender : MonoBehaviour { private ModbusSerialMaster _master; private void Start() { var sp = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One); sp.Open(); _master = ModbusSerialMaster.CreateRtu(sp); } private void Update() { if (Input.GetKeyDown(KeyCode.W)) { SendCommand(1); // 发送前进命令 } else if (Input.GetKeyDown(KeyCode.S)) { SendCommand(2); // 发送后退命令 } else if (Input.GetKeyDown(KeyCode.Space)) { SendCommand(3); // 发送停止命令 } } private void SendCommand(byte commandCode) { try { // 写入特定寄存器以传达命令 _master.WriteSingleRegister(0x00, commandCode); } catch (Exception ex) { Debug.LogError($"Failed to send command: {ex.Message}"); } } private void OnDestroy() { if (_master?.Transport is SerialPort port && port.IsOpen) { port.Close(); } } }修改代码将按键改为UI界面的按钮
时间: 2025-03-28 08:26:18 浏览: 24
### 修改代码以使用UI界面按钮代替键盘输入
为了将按键触发命令的方式改为通过UI界面上的按钮触发,你需要执行以下几个步骤:
1. **创建UI按钮**:在Unity编辑器中创建按钮,并将其关联到相应的事件处理方法。
2. **编写按钮点击事件处理器**:在`CommandSender`类中添加处理按钮点击事件的方法。
3. **关联按钮与事件处理器**:在Unity编辑器中将按钮的点击事件绑定到相应的方法。
以下是详细的修改过程:
#### 1. 创建UI按钮
1. 打开Unity编辑器,进入你的场景。
2. 在Hierarchy窗口中右键点击,选择`UI -> Button`来创建一个新的按钮。
3. 重复上述步骤,创建三个按钮分别用于前进、后退和停止功能。
4. 将这三个按钮命名为`ForwardButton`, `BackwardButton`, 和`StopButton`,以便更容易识别。
#### 2. 编写按钮点击事件处理器
修改`CommandSender`类,增加处理按钮点击事件的方法:
```csharp
using UnityEngine;
using UnityEngine.UI;
using Modbus.Device;
public class CommandSender : MonoBehaviour
{
private ModbusSerialMaster _master;
public Button forwardButton;
public Button backwardButton;
public Button stopButton;
private void Start()
{
var sp = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);
sp.Open();
_master = ModbusSerialMaster.CreateRtu(sp);
// 添加按钮点击监听器
if (forwardButton != null)
{
forwardButton.onClick.AddListener(() => SendCommand(1)); // 发送前进命令
}
if (backwardButton != null)
{
backwardButton.onClick.AddListener(() => SendCommand(2)); // 发送后退命令
}
if (stopButton != null)
{
stopButton.onClick.AddListener(() => SendCommand(3)); // 发送停止命令
}
}
private void SendCommand(byte commandCode)
{
try
{
// 写入特定寄存器以传达命令
_master.WriteSingleRegister(0x00, commandCode);
}
catch (Exception ex)
{
Debug.LogError($"Failed to send command: {ex.Message}");
}
}
private void OnDestroy()
{
if (_master?.Transport is SerialPort port && port.IsOpen)
{
port.Close();
}
}
}
```
#### 3. 关联按钮与事件处理器
1. 在Unity编辑器中选择`ForwardButton`,并在Inspector窗口中找到其`OnClick()`事件列表。
2. 点击`+`号添加新的事件,将`CommandSender`组件拖拽到空白处,然后选择`SendCommand(1)`作为回调方法。
3. 对其他两个按钮(`BackwardButton`和`StopButton`)重复上述步骤,分别选择`SendCommand(2)`和`SendCommand(3)`。
现在,当你点击UI界面上的按钮时,将会触发相应的命令发送逻辑,而不是依赖键盘输入。
#### 注意事项
- 确保你在Unity编辑器中正确设置了按钮的命名和关联,避免空指针异常。
- 如果你希望更灵活地管理UI布局,可以考虑使用Canvas和其他UI组件(如Panel)来组织按钮。
- 测试时注意检查串口连接是否正常工作,并确保按钮点击事件确实触发了预期的行为。
阅读全文
相关推荐



















