備忘録
ArduinoとUE4のシリアル通信の時に使うUE4Duinoを調べていると
大体UE4のバージョンが4.10ぐらいで止まっていて情報が古かった。
UE4Duinoの最新(v2.2)が配布されているので使ってみた。
バージョンは4.16.1。
Arduinoの準備や基本的な使い方に関してはすいません。
割愛します。
自分が使っているのはArduinoUno。
「Arduinoをはじめようキット」ってやつです。
正直詳しくはありません。素人に毛が生えた程度です。
ブレッドボードも使わずにそのままさしてます。
短い方(マイナス)をGNDに長い方(プラス)を13番ピンに。
Arduinoに書き込むスケッチに関してはこのサイトを参照しました。
これでシリアルモニタの入力によってLEDの点灯と消灯を制御できます。
「o」を送信すると点灯、「p」を送信すると消灯する。
// 変数の定義 #define LED_PIN 13 // 初期化 void setup(){ pinMode(LED_PIN, OUTPUT); // シリアルポートを9600 bps[ビット/秒]で初期化 Serial.begin(9600); } // 繰り返し処理 void loop(){ int inputchar; // シリアルポートより1文字読み込む inputchar = Serial.read(); if(inputchar != -1 ){ // 読み込んだデータが -1 以外の場合 以下の処理を行う switch(inputchar){ case 'o': // 読み込みデータが o の場合 Serial.print("LED ON\n"); digitalWrite(LED_PIN, HIGH); break; case 'p': // 読み込みデータが p の場合 Serial.print("LED OFF\n"); digitalWrite(LED_PIN, LOW); break; } } else { // 読み込むデータが無い場合は何もしない } }
今回はこんな感じで銃を撃った時にLEDを点灯・消灯させる。
UE4Duinoのzipファイルをダウンロードして解凍する。
以下のフォルダがあることを確認。
UE4起動。First Personで新規プロジェクトを作成後、いったん閉じる。
「Plugins」の中に「UE4Duino」フォルダをいれる。
再度プロジェクトを起動。編集のPluginsを開く。
下の方のInputにプラグインUE4Duinoが追加されていることを確認。
下準備は完了。
コンテンツブラウザからFirstPersonBP/Blueprintsにある
「FirstPersonCharacter」を開く。
イベントグラフが開く。
銃を撃つ、プレイヤーの移動などの処理がここで書かれている。
今回は、赤枠で囲っている部分はいらないので消去。
ドラッグで囲んでDeleteキーで消せる。
この状態からArduinoとのシリアル通信のためにノードを追加していく。
場所はどこでもいいですが、「Spawn projectile」の下あたりにしましょう。
右クリックして、ノードを検索しBeginPlayノードを置く。
同様にしてEndPlayノード、Open Serial Portノードも置く。
そしてClose Portノードも追加するが、右上の「状況に合わせた表示」の
チェックを外さないと表示されないので注意。
または検索せずに下にある「UE4Duino」からノードを選ぶこともできる。
やりやすい方でいきましょう。
Portに関してはデバイスマネージャから各自確認。画像はCOM3なので「3」に設定。
Baud Rateは9600にしましょう。
Close Portノードにターゲットとあるようにどのポートをcloseするか教える必要がある。
そこでOpen Serial Portノードの返り値を変数として扱い、Close Portノードに渡す。
Open Serial PortノードのReturn Valueから左クリックでドラッグし
「変数へ昇格」を選択。
すると変数として定義される。左側の「変数」にも表示される。
変数名は変更できる。ここでは「Arduino」とする。
そして変数Arduinoをイベントグラフ内にドラッグして「ゲット」を選択。
ターゲットとつなげて最終的にこんなかんじ。
これでUE4とArduinoのシリアル通信が可能。
最後に銃を撃った時の処理について。
そのまま「FirstPersonCharacter」で作業する。
ノードを置いていくのは以下の画像の通り。
Play Sound at Locationノードで銃を撃った時の音を鳴らしている。
このノードにつなげれば銃を撃った時の処理を新しく追加できる。
FlipFlopノード、UE4DuinoのPrintノード2つ、変数Arduinoを置く。
Printノードは例のチェックを外さないと表示されない。
FlipFlopはAとBの処理を交互に行うノード。つまり
銃撃つ⇒1回目の処理はArduinoに文字列「o」を書き込み(LED点灯)
銃撃つ⇒2回目の処理はArduinoに文字列「p」を書き込む(LED消灯)
…といった形で処理させることができる。とても便利。
これで完成です。
プレイしてみましょう。恐らく最初の動画のようなかんじになるはず。
ゲームエンジンとマイコンの連携はいろいろできそう。
簡単なゲームデバイスなんかも作れるかも。いずれにせよおもしろいです。
以上。