【UE5】UnrealEngineを利用して、時計を作ってみた

今回は、UnrealEngineを利用して、時計を作ってみたいと思います。

大きな流れ

①時計のモデル準備
②UnrealEngineへの3Dデータ取り込み
③シーンコンポーネント作成
④マテリアル設定
⑤動作プログラム(ブループリント)

時計のモデル準備

モデルは、Fabや3Dモデルを扱っているサイトなどから探してダウンロードしてもよいのですが、今回は、ライノセラスでモデリングしてみました。

モデリング方法は割愛させていただきますが、ポイントは時計の針の回転軸を原点でモデリングすることです。
時計の回転軸を原点にすることで、UEに取り込んだ後の処理が楽になります。

このように、パーツを分けてメッシュ化したfbxファイルを用意しました。

今回は、針を動かす所までの紹介ですが、将来的にベル部分もアニメーションできるように分けてあります。

UnrealEngineへの3Dデータ取り込み

UEのブループリントを利用する空のプロジェクトを作成します。

取り込みは簡単で、コンテンツブラウザにドラッグアンドドロップするだけです。

ドラッグアンドドロップすると、ImportContentsの画面が表示されます。
今回は、Materialは必要ないのでMaterialのチェックは外しました。

取り込むとこのような状態になります。

シーンコンポーネント作成

新しいアクターを作成します。「BP_Clock」と名前を付けました。

作成したアクターをダブルクリックで開きます。

インポートしたメッシュデータ、ドラッグアンドドロップでコンポーネントに追加します。

今回は、時計の針の回転軸を原点としてモデルを作成したため、そのままでも問題ありません。

針の回転原点が中心になっていない場合は、ここで調整をする必要があります。

マテリアル設定

今回マテリアルは、Epic Gamsesが用意している無料で利用できる「Automotive Materials」を利用します。

Fabで開き、プロジェクトに追加します。

追加すると、画像のように自動車用に用意されているマテリアルを簡単に利用することができます。

マテリアルを割り当てたいメッシュを選択し、詳細パネルのマテリアルにドラッグアンドドロップして適用していきます。

このように、割り当ててみました。
年代がバレますが、当時bBやアコードワゴンなどでよく見かけたマジョーラカラー。

よく見ると、文字盤の7の下に足が見えています。
これは、マテリアルが表面にしか反映されていないのが原因です。
モデリングもよくないですが・・・

これを回避するために、適用しているマテリアルインスタンスを開き、TowSided にチェックを入れます。

メッシュの表面・裏面共に適用されるため足が見えなくなりました。

動作プログラム(ブループリント)

時間が分からないと時計とは言えませんね。
ということで、ブループリントで現在時刻を取得して針を動かしていきたいと思います。

マテリアルの適用は、「ビューポート」というタブで行いましたが、ブループリントは「イベントグラフ」というタブでおこないます。

今回動かしたいのは、秒針・長針・短針 の 3つのパーツです。
この3メッシュをコンポーネントから見つけて、右側にドラッグアンドドロップします。

現在の時刻を取得するノード「Now」を検索します。

秒針、長針、短針の動きはこのような感じで再現できると思います。

レベルに配置して実行して実行してみました。
UEで、時計を作るというところは完成しました。

ただ、中の人(この記事の投稿者)は神経質な性格(自称)なので、時計のカチカチ音があまり好きではありません。
ということで、連続秒針(SEIKOの呼び名)・スムーズ秒針(CASIOの呼び名)にしていきたいと思います。

連続秒針にする

ブループリントのNowから、秒をミリ秒で取得します。
ミリ秒と秒を利用し、Tickでフレーム毎に処理をしカチカチを連続秒針にします。

実は、長針・短針も1時間に1回・1分に1回動く仕様ではないので、作りとしては同じ考えです。

初期のマップに置いたところ、ちょっと寂しかったので、Broadcast Stdudioの環境を入れてみました。

タイムキーパーとして頑張っている感じがでました。

最後に、動画をムービーレンダーキューで書き出してみました。

ここで、学びが一つありました。
アンチエイリアスを利用したため、1フレーム撮影するのに時間がかかっていたため時間が凄い勢いで進んでいました。

ムービーレンダーキューを利用する場合は、実際の時間を使うことはできない(ムービーレンダーキューで動画を書き出すときに実際の時間が必要になるシチュエーションは思いつきませんが)と学べました。

エンジニアリング事業部からの最新情報をお届けします