盆友搞了个Uduino插件,正好手边有Unity和Arduino,用按钮和灯泡实现Unity控制Arduino与Arduino控制Unity。
感谢Arduino跟Unity通讯,我的按钮的标准写法
对如何导入插件有疑问的话,建议查看官方视频教程
视频教程: Connect Arduino to Unity in less than 1 minute - Uduino
using System;
using System.Collections;
using System.Collections.Generic;
using Uduino;
using UnityEngine;
public class UduinoTest : MonoBehaviour
{
///
/// 小灯管脚
///
int pin11;
///
/// 按钮管脚
///
int pin2;
///
/// Arduino设备
///
UduinoDevice arduinoDevice;
public GameObject myCube;
// Start is called before the first frame update
void Start()
{
//当连接板子时触发
UduinoManager.Instance.OnBoardConnected += OnArduinoConnected;
}
///
/// 当板子链接时
///
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();
}
}
}
///
/// 给Cube加力
///
public void AddForcesToCube()
{
myCube.GetComponent<Rigidbody>().AddForce(Vector3.up * 2f);
}
///
/// 呼吸灯
///
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会向上升起,编辑器右下角可以看到管脚传来的值。
这里可以看到灯泡忽明忽暗。