こんにちは。この連載も、思いつきで始めたわりに、もう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月にはちゃんと整理して、「見ればわかる」状態にしていくつもりです。
そのときはまた、お知らせしますね。
コメントを残す