あんまりUE4+Arduinoってやってる人がいないので、ちょっとArduinoについて触れてみようかなぁと。
クリエーター的視点で何ができるかなぁって感じなので、プログラマー視点で見るとちょっとそれ違うんじゃない?ってところが多いかもしれないけど、その辺は目を瞑って見てもらえればと。
まずはArduinoって何ってところだけど、今回に関してはものすごい端折った説明をすると、センサーとかの数値をプログラムとかで制御出来る用に変換する、またその逆って感じでとらえてもらえればわかりやすいと思います。
具体的に何ができるかというと、例えば以下のような感じ。
APDS-9960で意味もなく色を拾って意味もなくUE4のマテリアルに反映させる何か。 #EpicFriday #Arduino #UE4 pic.twitter.com/U6PB6ZhDkg
— じゅる (@xxJulexx) 2017年10月27日
ヒャッハー!!! pic.twitter.com/cRF7RWKXBa
— じゅる (@xxJulexx) 2017年7月31日
■導入方法
UE4Duinoや導入方法は↓あたりを参考にしてみてください。
Unreal Engine 4 (UE4) Advent Calendar 2015 - Unreal Engine 4とArduinoで遊ぼう(準備編)
http://pantherhead.com/blog/2015/12/21/20151222/
UE4Duino(Plugin)
https://github.com/RVillani/UE4Duino
■Arduinoから数値を受け取る
1つ目の映像は
・ArduinoでカラーセンサーからRGB値を取得
・UE4へ数値を流し込む
・マテリアルのRGB値へ反映
Arduinoでセンサーから取得したものをSerial.print(String)したものをUE4DuinoでReadするんだけど、数値をバラバラっと投げるのもどうかと思うので、取り扱いが簡単なようにいったん文字列にまとめて投げてます。
Serial.print(r);
Serial.print(",");
Serial.print(g);
Serial.print(",");
Serial.println(b);
UE4に渡される文字列
r,g,b(改行)
でUE4でもう一度数値に変換と。
Splitで「,」で区切ってバラしてます。(もっといい方法あるかも)
で、Arduinoの設定にもよるんだけど、そのままだとすご勢いで数値が流れ込んできて数値が暴れまくるので、平均値とるようにしてます。
Arduino側でSerial.print()のあとにDelay()をすることで数値を投げるタイミングを制御できるけど、そのタイミングの数値が欲しいというよりは、一定時間の平均値が欲しいのでUE4側で処理してます。
あとはMake VectorしてSet Vector Psarameter Value on Materialsでマテリアルのカラーに適用。
簡単に言うとArduinoでSerial.printでデータを出して、UE4(UE4Duino)でRead Stringで受け取るだけ。
文章的に長くなってしまったけど、比較的簡単に出来るかと。
■Arduinoへ数値を渡す
2つ目の映像は
・UE4でアクションを起こしたいタイミングでArduinoへ信号を投げる(UE4Duino>Printノード)
・ArduinoでUE4からStringを受け取って指定した処理をする
Arduino側での処理はUE4からStringを1文字受け取って、その文字が何かによって処理を実行みたいな感じ。
この例では文字「o」「p」をトリガーとして使ってます。
文字列にすることも出来るけど処理方法が変わってくるので、ここではとりあえず1文字で。
↓Arduino側の処理
void loop() {
int incomingByte = Serial.read();
if (incomingByte != -1 ) {
switch (incomingByte) {
case 'o':
digitalWrite(Relay_PIN, HIGHLOW);
break;
case 'p':
digitalWrite(Relay_PIN, LOW);
break;
}
} else {
digitalWrite(Relay_PIN, LOW);
}
}
この映像は100V(普通の壁コンセント用)のスポットライトのコードの途中を切ってリレーを間に挟んで、単純に100V電源をON/OFFしてるだけ。
(電球の負荷的にもあまりよろしくないと思うけど、リレーモジュールの検証ということで)
※感電とかいろいろと危ないので自己責任で。
Arduinoからデータを受けるのに比べてちょこっと複雑かも。
■あとはアイデア次第!
基本的にはこんな感じでUE4への入力・UE4からの出力が出来たところで、あとは何から入力するか・何へ出力するかっていうアイデア次第かなぁと。
入力系はいろいろなセンサーが手軽に手に入るし、出力系はモーターや照明など(他にあまり思いつかない…)いろいろあると思うので、気になったものは是非試してみたください。
以下、参考までに。
そういえばUE4でオフィスの照明制御出来るようにしてみた。とくに意味はないけど。#arduino #UE4 pic.twitter.com/ZuogKQBqUx
— じゅる (@xxJulexx) 2017年11月14日
UE4で距離センサー(VL53L0)やってみた。#UE4 #arduino pic.twitter.com/jrgUVZZhDt
— じゅる (@xxJulexx) 2017年11月15日
Arduinoから1灯ずつ制御すると現状この速度が限界。かといってシリアル通信で一気に全部のデータ流し込むとStringで1000文字近くもいっちゃうのでそもそも無理だし…なんかいい方法ないかなぁ。DMXならいけるんだけどUE4でやろうっていうのとちょっと趣旨が変わって来ちゃうし pic.twitter.com/6htqHcHoWD
— じゅる (@xxJulexx) 2017年9月13日