Daiginjoのゲーム制作ブログ(UE4,C++)

ゲームの作り方から私用のメモをまとめたブログです

UE4とArudinoでポート通信を

UE4とArudinoでポート通信

 今回は、UE4とArudinoでのポート通信を行っていこうと思います。
↓みたいな感じでクリックしたらLEDが赤に変わるようにしたいと思います。

1. 下準備

 今回、UE4とArudinoつなげるために「UE4Duino」というプラグインを使用します。
導入の方法は、以下の記事が参考になると思います。

UE4Duino本体
https://github.com/RVillani/UE4Duino

導入方法
http://pantherhead.com/blog/2015/12/21/20151222/

2. Arudino側の準備

 続いて、Arudino側の準備をしましょう。
Arudinoに以下の様なスケッチを書き込んでUE4からの送られてくるシリアルを受け取れるようにしましょう。

#define FIRE_LED 9
#define WATE_LED 6

void setup() {
	Serial.begin(9600);
	pinMode(FIRE_LED ,OUTPUT);
	pinMode(WATE_LED ,OUTPUT);
	digitalWrite(WATE_LED ,HIGH);
}

void loop(){
	if(Serial.available() > 0){
		String inputStr = Serial.readStringUntil('\n');  //'\n'は読み込まれない
		if(inputStr.charAt(0) == 'F'){
			digitalWrite(FIRE_LED ,HIGH);
			digitalWrite(WATE_LED ,LOW);
		}
		else(inputStr.charAt(0) == 'W'){
			digitalWrite(FIRE_LED ,LOW);
			digitalWrite(WATE_LED ,HIGH);
		}
	}
	else{
		digitalWrite(WATE_LED ,HIGH);		
	}
}

※Serial.available() : シリアルポートに何バイトのデータが到着しているかを返す
※Serial.readStringUntil(s) : シリアルバッファから文字を読み、sの終了文字を検出するかタイムアウトすれば終了。


そして、回路をこのように組んでいきます。

3. UE4側の準備

いよいよUE4の準備に取り掛かります。
今回は、「FirstPerson」でプロジェクトを作りました。

UE4側の準備1

 まず、「FirstPersonCharacter」を開き「Event BeginPlay」に「Sequence」を追加して「Open Serial Port」でポートを開きましょう。
 この時、「Port」にはArudinoがつながっているポートに「Baud Rate」はArudinoで設定したRateに設定します。Return Valueのピンを右クリックで変数「Arudino」に昇格をしておくと今後の拡張が楽になります。
 次に、「Event EndPlay」を追加し「Close Port」でポートを閉じましょう。


 ここできちんと閉じておかないとArudinoの挙動がおかしくなるかもしれません。

UE4側の準備2

 LEDのライトをつけるためのシリアルを送る処理を作っていきます。
先ほど変数に昇格した「Arudino」から「Print」と「Line End to String」をそれぞれ2個ずつ用意して以下のようにつなげます。ここでは、「ImputAction Fire」でシリアルが送られるようにしました。

 「Delay」に入っている数字がLEDが点灯している時間となります。

4. 実行とまとめ

 UE4のPlayボタンを押して実行してみてください。
↓こんな感じになりましたか?


 今回は、UE4側からの一方的な指示でしたが後半ではもう少し複雑な処理をさせていこうと思います。