🛠箱庭ラボ日記──2025年7月17日


こんにちは。この連載も、思いつきで始めたわりに、もう5回目になりました。
続けるつもりなんてなかったのに、気づけばこうしてまた書いているのだから不思議なものです。

今週はというと、ほとんどUnreal Engine漬けの毎日でした。
Unityで積み上げてきたものを、Unrealの世界にひとつひとつ移し替える作業。
LEDの点滅ひとつ、カメラの挙動ひとつ、簡単そうでいて、やっぱり違う。
それでも、「お、これは…」と手が止まる美しさが、Unrealにはあるんですよね。

今週のテーマは、Unrealの洗礼でした

今週のテーマは、Unity版で先に動いていた機能を、Unrealに移植するというものでした。
たとえばLEDの点滅制御。飛行モード(ATTIやGPS)に応じて光り方を変える、ちょっとした演出なんですが――Unreal初心者のぼくには、右も左もわかりません。

当然、いつものようにプログラミングして動くようにするには、たくさんのハードルがあります。

たとえば、Unityでは MonoBehaviour に頼っていた部分を、Unrealでも AActor で置き換えればいいのかなと思っていたら、実は ActorComponent や USceneComponent を使わないとまともに組めない、ということに気づくまでに丸一日かかったり。

また、Unityでは当たり前のように自動ビルドされるのに、Unrealでは手動でビルドしなければいけないことも知らず……Visual Studioでビルドしても反映されない!
仕方なく毎回キャッシュを消して、プロジェクトを再作成。
「いや、いくらなんでもこんなんないでしょ?」と思っていたら、
Unreal Engineのエディタ右下にある“コンパイル”アイコンをクリックするのが定番だということに、ようやく気づく。

ここまでに、2日。

もう、夕陽を眺めながら、「今日1日の自分って……」としょんぼりするわけです。

現在の進捗状況

そして、もう今日は木曜日。もう今週も夕日が降りる頃合いです。今の進捗状況を一覧化するとこうです。

“◎”が順調に動いているもの、”X”は……まあ、7月はやらないってことで。
カメラSHOTは、カメラ撮影機能です。カメラMOVEは、カメラのピッチ角を変えるものです。
Python APIとゲームパッドどちらでも動くするようにする必要があります。
まー、これはハマりました。合計3日かけてようやく動くところまで行きました。

(カメラのピッチ角変更デバッグの様子)

そして、本日の対応の1つは、LEDライトでのドローン状態/制御モードのビジュアライズ。

緑点滅はGPSモード(位置制御ありで安定)、赤点滅はATTIモード(姿勢だけの制御でちょっと不安定)。
ちょっと操縦、気をつけてねって感じです。

ドローン上面のLED点滅は、制御状態の違いを表しています。赤点滅は離陸モード、緑点灯はホバーモード、黄色点滅は着陸モードです。

LiDARは……すみません、7月中は色々やることが多いので、気力が足りませんでした。気持ちが上向いたら考えます!(笑)

困りました

最近、何が困っているかというと――問い合わせ対応です。

箱庭は、オープンソースで開発しているプロジェクトです。
誰でも自由にコードを見て、改善点を issue に書いてくれる。それ自体はありがたいし、本来あるべき姿でもあります。

でも、Unreal Engineで苦戦している今みたいな時期に、
数時間おきに届く issue コメントに返すのは、正直へこたれます。

たとえば、こんな感じのやり取りが来ます:

https://github.com/toppers/hakoniwa-drone-core/issues/46

内容としてはそれほど複雑ではないのですが、
文脈を読み解いて、現象を想像して、コードを追って、
そのうえで返信を書く……という一連の流れが、もうすでに開発で消耗している身には、かなり堪えるんです。

APIをやめた理由、求められる復活

今回の issue の趣旨は、箱庭ドローンの物理エンジンの衝突機能についてです。

今まで、2つの API(trigger_collision と trigger_impulse_collision)を公開していたのですが、
設計上、後者の impulse API のほうが汎用的に使えることが分かり、将来的な保守性も考えてそちらに一本化する方針を取りました。

ところが――「いや、前の API を復活させて!」という要望が飛んでくる。

気持ちは分かります。自分の使っているコードが急に動かなくなる不安も、文句のひとつも言いたくなる気持ちも。
でもこちらとしては、設計の整理や仕様の一貫性、将来の負債を避けるために、
あえてその「やめた決断」をしていたわけです。

もちろん、ちゃんと説明すれば理解してもらえることもあります。
でも、説明するにも気力がいるんですよね。特に、別件でUnrealに何度もしょんぼりさせられているときには(笑)

やってやろうじゃないか

はい、それで、思い立ったわけです。
「Unreal Engine の開発を加速して、衝突対応もやってやろうじゃないか!」

そうして、これが本日の最後の成果です。

平鍋さんが考案した、ドローン衝突の API。完璧に動いています!
何なら、このドキュメントを見てください。すごいです:

https://github.com/toppers/hakoniwa-drone-core/blob/main/docs/api/physics/Collision.md

まー、引数は多いですが、ちゃんと物理側のことを考えて入力すれば、納得いただける設計になっていると思います。

最後に

箱庭ドローンシミュレータは、実装が先行してます。ドキュメントは後回しなってます。

ごめんなさい。でも、8月にはちゃんと整理して、「見ればわかる」状態にしていくつもりです。
そのときはまた、お知らせしますね。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP