Unity Arduino完美协作工具之Uduino
- 前言
- 环境搭建
-
- Unity插件导入部分
- Arduino代码上传部分
- Unity场景搭建部分
- 硬件场景部分
- 控制代码
- 使用效果
- 注意事项
前言
盆友搞了个Uduino插件,正好手边有Unity和Arduino,用按钮和灯泡实现Unity控制Arduino与Arduino控制Unity。
感谢Arduino跟Unity通讯,我的按钮的标准写法
环境搭建
对如何导入插件有疑问的话,建议查看官方视频教程
视频教程: Connect Arduino to Unity in less than 1 minute - Uduino
Unity插件导入部分
将插件导入Unity

Arduino代码上传部分
将Uduino代码上传至Arduino

Unity场景搭建部分
一个Cube(添加刚体组件)与一个Plane

硬件场景部分
灯泡链接GND和11管脚
按键连接GND和2管脚

控制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | using System; using System.Collections; using System.Collections.Generic; using Uduino; using UnityEngine; public class UduinoTest : MonoBehaviour {<!-- --> /// <summary> /// 小灯管脚 /// </summary> int pin11; /// <summary> /// 按钮管脚 /// </summary> int pin2; /// <summary> /// Arduino设备 /// </summary> UduinoDevice arduinoDevice; public GameObject myCube; // Start is called before the first frame update void Start() {<!-- --> //当连接板子时触发 UduinoManager.Instance.OnBoardConnected += OnArduinoConnected; } /// <summary> /// 当板子链接时 /// </summary> private void OnArduinoConnected(UduinoDevice device) {<!-- --> //拿到pin口 pin11 = UduinoManager.Instance.GetPinFromBoard("11"); pin2 = UduinoManager.Instance.GetPinFromBoard("2"); //设置pin口控制方式 UduinoManager.Instance.pinMode(pin11, PinMode.PWM); UduinoManager.Instance.pinMode(pin2, PinMode.Input_pullup); } float timeCount=0; int count; bool isUp = true; // Update is called once per frame void Update() {<!-- --> Huxideng(); if (UduinoManager.Instance.hasBoardConnected()) {<!-- --> //读取pin口数字量 int a = UduinoManager.Instance.digitalRead(pin2); if (a == 0) {<!-- --> AddForcesToCube(); } } } /// <summary> /// 给Cube加力 /// </summary> public void AddForcesToCube() {<!-- --> myCube.GetComponent<Rigidbody>().AddForce(Vector3.up * 2f); } /// <summary> /// 呼吸灯 /// </summary> private void Huxideng() {<!-- --> if (UduinoManager.Instance.hasBoardConnected()) {<!-- --> timeCount += Time.deltaTime; if (timeCount >= 0.01f) {<!-- --> if (isUp) {<!-- --> count++; } else {<!-- --> count--; } if (count >= 255) {<!-- --> count = 255; isUp = false; } if (count <= 0) {<!-- --> count = 0; isUp = true; } //写入pin口模拟量 UduinoManager.Instance.analogWrite(pin11, count); timeCount = 0; } } } } |
使用效果
小灯为呼吸灯效果,按下按键Unity中的Cube会向上升起,编辑器右下角可以看到管脚传来的值。

这里可以看到灯泡忽明忽暗。

注意事项
当编辑器运行时,注意这两个地方不要有冲突的管脚,会造成0和1交替出现的情况。
