Unity用ハードウェア自作への道. UnityとArduinoを連携 by UNIDUINO



Unityで使えるゲームコントローラを自作したり、ゲーム内の振動をコントローラにフィードバックしたり、、、

そんなUnity用の自作ハードウェアを作りたいと思ったら、Unity + Arduino + UNIDUINOが便利そうです。
UNIDUINOというUnity Assetを使うとArduinoを比較的簡単にUnityと連動できます。

今回のサンプルではArduinoに付いているLEDを点滅させます。
なので特に回路を組む必要はありません。コンピュータとUSBでつないでいればOKです。


その他、応用編はコチラ
- [Unityから振動モータを制御してみる](http://takahi5.hatenablog.com/entry/2014/06/07/073258)
- [UnityのオブジェクトをArduinoと加速度センサで動してみる](http://takahi5.hatenablog.com/entry/2014/05/21/194122)

##UNIDUINOをアセットストアで購入
window > Asset store でUNIDUINOを検索＆購入します。
$30しますが、ここは奮発して購入します。

ここが第一の壁ですが(笑)、ここを越えればあとは割りと楽です。

![kobito.1402085802.101635.png](https://qiita-image-store.s3.amazonaws.com/0/29775/2a67ba75-addc-a601-9999-ab25af3dd729.png "kobito.1402085802.101635.png")


##UNIDUINOをimport

新規のプロジェクトを作って、
先ほど購入したUNIDUINOをインポートします。

![kobito.1402085923.819609.png](https://qiita-image-store.s3.amazonaws.com/0/29775/978ea1eb-129a-d9b7-cbba-5a50d17e2782.png "kobito.1402085923.819609.png")


##Uniduinoプレファブをドラッグ＆ドロップ
Projectウィンドウで、Uniduino>Prefabsを開きます。
UniduinoのプレファブをHierarchyウィンドウにドラッグ＆ドロップします。
![kobito.1402086264.632270.png](https://qiita-image-store.s3.amazonaws.com/0/29775/b2eaced8-bfb3-db4f-625d-862646ad38ba.png "kobito.1402086264.632270.png")



##Game Object追加

Game Object > Create emptyでオブジェクトを追加して、
ArduinoLogicと名前をつける。

![kobito.1402086355.342160.png](https://qiita-image-store.s3.amazonaws.com/0/29775/0e111db6-5002-54d2-1b92-969dd1740d46.png "kobito.1402086355.342160.png")




##コーディング
Projectウィンドウで右クリックして
Create > C# Script
でC#スクリプトを追加して、BlinkyLightに名前を変更する。
![kobito.1402086476.017186.png](https://qiita-image-store.s3.amazonaws.com/0/29775/77a46a2f-55ee-f601-27d5-261a13257411.png "kobito.1402086476.017186.png")

BlinkyLightをダブルクリックしてコードを編集。

13番ピンをデジタルアウトプットに設定して、ループでON/OFF切換しています。
13番ピンは組み込みのLEDに対応しているピンです。

```BlinkyLight.cs
using UnityEngine;
using System.Collections;
using Uniduino;

public class BlinkyLight : MonoBehaviour {

	public Arduino arduino;
	// Use this for initialization
	void Start () {
		arduino = Arduino.global;
		arduino.Setup(ConfigurePins);	
		StartCoroutine(BlinkLoop());
	}

	void ConfigurePins( )
	{
		arduino.pinMode(13, PinMode.OUTPUT);
	}

	IEnumerator BlinkLoop() {
		while(true) {   
			arduino.digitalWrite(13, Arduino.HIGH); // led ON
			yield return new WaitForSeconds(1);
			arduino.digitalWrite(13, Arduino.LOW); // led OFF
			yield return new WaitForSeconds(1);
		}           
	}

	// Update is called once per frame
	void Update () {
	
	}
}

```



## コンポーネント追加

C#スクリプトをArduinoLogicにドラッグ＆ドロップして、
ArduinoLogicにコンポーネント追加

![kobito.1402086779.175072.png](https://qiita-image-store.s3.amazonaws.com/0/29775/f161a390-ae34-23de-f9d9-89a42712e830.png "kobito.1402086779.175072.png")

## シリアルポートライブラリの追加
さっそく実行してみます。
すると以下の様なエラーが表示されると思います。(macの場合)

```
SerialPort support is not installed. Open Window > Uniduino to install it
```

説明に従って Window > Uniduino を選択。
表示されたダイアログでシリアルポートライブラリをインストール。
![kobito.1402086973.450333.png](https://qiita-image-store.s3.amazonaws.com/0/29775/762d665e-3272-6eea-4b90-fded7dc5a118.png "kobito.1402086973.450333.png")


インストール後は一度Unityごと落として、再度開く必要があります。

##いざ実行...LED点滅！
再度実行すると、、、Arduinoに何か書き込まれて、、、LEDが点滅します！
![kobito.1402087308.530106.png](https://qiita-image-store.s3.amazonaws.com/0/29775/c1674cbe-6d69-8bab-dbb0-7439975486a9.png "kobito.1402087308.530106.png")