3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

鈴鹿高専Advent Calendar 2023

Day 18

手軽に触るUE4duino

Last updated at Posted at 2023-12-17

これはなに

この記事は鈴鹿高専Advent Calendar2023 18日目の記事です。

本記事ではESP32を使用しますがその環境構築などは説明しませんのでご了承ください。

UE4duinoとは

UE4とArduino(COMポート)のSerial通信を行うためのプラグインです。
Arduino専用というわけではなくCOMポートを使ってのSerial通信を行えるものなのでマイコンなら割となんでも通信できます。
入れ方については普通のプラグインと変わりません。

使ってみる

送ったメッセージをそのまま返すものを作ってみます
今回使用するものは以下になります

  • Unreal Engine4.27
  • ArduinoIDE
  • ESP32

UE4側でやること

LevelBluePrintにて以下のようなノードを作成しました
image.png

Open Serial Port
COMポートとボーレートを指定してポートを開放します

返り値にあるSerialオブジェクトで送受信するCOMポートを選ぶことができます

Print Line
Stringと改行(/n)を指定したCOMポートに送ります
Read Line
指定したCOMポートから改行(/n)までのStringを取得する
Close Serial Port
指定したCOMポートを閉じます

Arduino側でやること

以下のスケッチをESP32に書き込みます

ue4duino_test.ino
String s;

void setup() {
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
    s = Serial.readStringUntil('\n');
    Serial.println(s);
  }
}

改行(\n)までstringを受け取ってそれを送り返すだけのシンプルなコードです
ボーレートはUE4で設定した値と合わせてください

結果

printlineで送った文字列がUE4に表示されます

ミニゲームも作ってみる

UE4duinoを使う魅力はセンサー等を利用してふつうとは違うゲーム体験ができることだと思います。
なのでポテンショメーターを使って簡単な釣りゲームを作ってみようと思います。

準備

使用するものは以下

  • Unreal Engine4.27
  • ArduinoIDE
  • ESP32
  • ポテンショメーター(M22e10)

具体的にどんなデータをやり取りするかを決めます
ESP32のanalogreadで取れる値は0~4096で、今回は細かな値を送る必要はないので読めた値を100分の1した値を送ることにします

Ue4側でやること

色々、やり方があると思いますが自分はwidgetのスライダーを利用して作成しようと思います。
ということでとりあえずwidgetのBluePrintを作成して、そのwidgetをLevelBluePrintで開きます。
image.png

後はこのwidgetの中身をこねこねするだけ
デザイナーはこんな感じ
image.png

気を付けることはスライダーのminとmaxをポテンショメーターで送られてくる値に合わせること。
今回は0~40の整数値が送られてくるのでmaxを40、minを0にします。
グラフの中身はこんな感じ

画像いっぱいなので折りたたみ constructとdestructの処理

image.png
tickの処理1(初期化と通信)

image.png
tickの処理2(釣りのゲージが100になったかの判別)

image.png
tickの処理3(釣りゲーム中の主な挙動)

image.png

これでUe4側でやることは終わり

Arduino側でやること

以下のスケッチを書き込み

ue4duino_fishing_game.ino
int kahen_teiko_pin = 32;
int kahen_teiko_data = 0;

void setup() {
  Serial.begin(115200);
  pinMode(kahen_teiko_pin, INPUT);
}

void loop() {
  int kahen_teiko_data = analogRead(kahen_teiko_pin) / 100;
  Serial.write(kahen_teiko_data);

  delay(50);
}

そしてポテンショメーターをESP32につなげます。
入力端子に3.3V、出力端子にGND、ワイパにはスケッチに定義されたio32を接続します。

結果

fishing_game-64-bit-Development-PCD3D_SM5-2023-12-15-16-03-07.gif
ポテンショメーターを動かしてる様子

これで完成

余談

  • Windowsでしか使えない…と思います。
    筆者はWindowsでしか使ったことがないのではっきりはわかりませんが使えないと思います。
  • UE4duinoとSerial通信をしようとした際、if(Serial.available())の部分でUe4からの通信が始まるまで処理が完全に止まってしまうという事案に遭遇しました
    なぜif文で止まるのかはわかりませんでした
    自分の研究でこのトラブルに遭遇した際は間に別のESP32をSerial2で噛ませて通信させるゴリ押し方法をとりました。
  • 間違っている箇所、おかしい箇所などあればコメントでお願いします...
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?