Unity Arduino完美协作工具Uduino

12 篇文章 0 订阅

前言

盆友搞了个Uduino插件,正好手边有Unity和Arduino,用按钮和灯泡实现Unity控制Arduino与Arduino控制Unity。

感谢Arduino跟Unity通讯,我的按钮的标准写法

环境搭建

对如何导入插件有疑问的话,建议查看官方视频教程
视频教程: Connect Arduino to Unity in less than 1 minute - Uduino

Unity插件导入部分

将插件导入Unity
Uduino导入Unity

Arduino代码上传部分

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

Unity场景搭建部分

一个Cube(添加刚体组件)与一个Plane
场景

硬件场景部分

灯泡链接GND和11管脚
按键连接GND和2管脚
硬件

控制代码

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会向上升起,编辑器右下角可以看到管脚传来的值。
Unity界面
这里可以看到灯泡忽明忽暗。
灯泡忽明忽暗

注意事项

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

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Unity是一款跨平台的游戏开发引擎,而Arduino是一款开源硬件平台,用于构建各种物理交互项目。当结合UnityArduino时,我们可以使用Arduino的压力传感器来实现各种有趣的游戏或虚拟现实应用。 首先,Arduino的压力传感器可以用于检测物体受力的大小。比如,我们可以制作一个跳跃游戏,在游戏中玩家需要使用脚踩在压力传感器上跳起来。传感器将感知到玩家踩踏的压力,并将这个信息传递给Unity引擎。根据接收到的压力数据,Unity可以相应地调整角色的跳跃高度和力度,使得游戏更加真实和互动。 此外,Arduino的压力传感器还可以用于模拟虚拟现实场景中的真实触摸感受。例如,我们可以将传感器安装在一个虚拟键盘或按钮上,当玩家用手指轻轻触摸按钮时,传感器会感知到压力变化,并将这个信息传递给Unity引擎。Unity可以根据接收到的压力信号来控制虚拟按钮的触发效果,使得玩家能够真实地感到触摸的反馈。 最后,UnityArduino还可以结合起来制作一些基于身体运动的游戏。我们可以使用Arduino的压力传感器来检测玩家不同部位的压力变化,例如手、脚或身体。通过将传感器的数据传递给Unity,我们可以利用这些数据来模拟玩家在游戏中执行特定的动作或技能。 总的来说,UnityArduino的压力传感器结合可以创造出更加真实、互动和有趣的游戏体验。无论是在虚拟现实领域还是普通的游戏开发中,这种结合都提供了更多的创造空间和可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值