フラッシュセールライセンス 30% オフ、同じ価格で増量トークンパック。ライセンス 30% オフ + 増量トークンパック終了まで …料金を見る → V2 の新機能を見る · 刷新されたインターフェース、Crew、Blueprint から C++ への変換、マルチプレイヤーのプレイテスト、エディター内アップデート 変更履歴を読む →
すべての記事
8 分で読めます

Unreal Engine のズーム:AI で長押しズームを作って修正する

Unreal Engine で長押しズームを作る方法。Z キーで視野角を 90 から 50 へ滑らかに変え、照準も表示。テストは通ったのに実際のゲームで動かなかった原因も解説。

Unreal Engine のズームは、3 つの小さな考え方でできています。カメラには視野角があり、数値が小さいほど近くに見えること。キーを押し続けているあいだは視野角がズーム値に向かって動き、離すと元に戻ること。そして、照準がズームに合わせてフェードインとフェードアウトをすること。いちばん簡単な作り方は、この効果全体を 1 回の依頼で AI に作らせることです。

この記事は少し変わっています。とても役に立つ出来事、つまりテストは通ったのに、実際のゲームでは動かなかったという出来事を扱うからです。実際に使ったプロンプト、AI が何をテストしたか、実際のプレイで何も起きなかったときに何が起こったか、そして AI がどのように原因を探したかをお届けします。

完成したズームの動き

雪の中に立って、Z キーを押し続けます。カメラがゆっくりズームインし、キャラクターが画面いっぱいになって、画面上部に小さな文字「Zoom」が表示されます。キーを離すと、視界は滑らかに元に戻ります。

キャラクターにズームインしたカメラ。画面上部に Zoom の文字が表示されている

2 回目の実際のプレイ:Z キーを押し続けるとズームインし、Zoom の文字が表示されます。

プロンプト

これをコピーして、ズームを 30 度に変えながら、AI が何を作るか試してみてください。

Make a zoom view. Create BP_ZoomView in /Game/Series/EP35_Zoom, an actor that I place once in the level, that listens for the Z key. While Z is held, the player's camera zooms in: the camera field of view eases from its normal value to 50 degrees over 0.25 seconds, and a thin white crosshair made from four small bars with a gap in the middle fades in at the centre of the screen. When Z is released, the field of view eases back to the normal value over 0.25 seconds and the crosshair fades out. The actor must read the camera's normal field of view when the game starts and restore exactly that value. Create the crosshair as a widget called WBP_Crosshair. Show the text Zoom in the top centre below the existing Blizzard box while zoomed. Keep the zoom field of view and the blend time as variables. Place the actor near the player start. Then play test it: record the camera field of view before, hold Z and check it reaches 50, check the crosshair is on screen, release Z and check the field of view returns to the recorded value and the crosshair is gone, and fix anything that does not work.

通常の視野角についての一文に注目してください。アクターはそれを読み取り、まさにその値に戻さなければなりません。これは 氷の床 と同じルールです。自分で決めた数値で戻してはいけません。必ず、読み取った値に戻してください。

AI はどう作るのか

AI はまず、ズームの Blueprint と照準のウィジェットという 2 つのアセットを作り、プロジェクトでウィジェットやグラフがどう作られているかを読み取ります。0 から 1 までの 1 つのブレンド値がすべてを動かします。Z キーを押し続けているあいだは上がり、離すと下がります。

AI は、カメラマネージャーには視野角を設定する Blueprint から呼び出せる関数がないことに気づき、プレイヤーのカメラコンポーネントを直接操作します。そのあとコンパイルし、グラフを読み戻して、アクターを配置します。

1 つのブレンド値で動く BP_ZoomView のイベントグラフ

ズームのグラフ:1 つのブレンド値が、視野角と照準を動かします。

テストは合格する

アクターは最初に、開始時の視野角 90 を記録しました。Z キーを押し続けると、ほんの少し後に視野角は 62.6 になり、瞬間的に切り替わらず滑らかに変化していると分かります。その後、50 に到達します。照準は 4 本のバーがすべてそろい、不透明度は最大で、文字も表示されています。Z キーを離すと、戻る途中の値は 72.9 で、その後ちょうど 90 に戻ります。照準は消えています。7 項目のチェックがすべて通りました。

レポート

照準、カメラ、ポーリング、未保存のレベルについての注意点を載せた AI のレポート

最初のレポート:修正は不要で、注意点に制約が書かれています。

レポートには、テストの後に修正は不要だったと書かれています。また、メインメニューが画面の中央を覆っていたため、AI は 4 本のバーをスクリーンショットで確認していないこと、そのためその確認はウィジェットの状態から行ったことも書かれています。さらに、アクターがポーンのカメラコンポーネントを直接操作していること、入力イベントを使わずに毎フレーム Z キーを読み取っていること、そして未保存のレベルにしか存在しないことも記されています。

実際のゲームでは何も起きなかった

次は実際のプレイです。メインメニューで Play をクリックしてヒーローが現れたあと、Z キーを押し続けても何も起こりません。カメラは動かず、照準も出ません。テストは通ったのに、実際のゲームでは動かなかったのです。

そこで、次のメッセージでは、見たままを同じチャットで AI に伝えます。メインメニューで Play をクリックしてヒーローが出現したあと、Z キーを押し続けても何も起こりません。原因を調べて修正し、プレイヤーと同じやり方でもう一度テストしてください。

AI はどう原因を探したか

AI はまず、プレイヤーと同じ流れを再現します。メニューで Play をクリックし、そのあと Z キーを押し続けます。その結果、アクター自体には問題がなさそうで、メニューにもおかしな動作はないと分かります。メニューは入力モードを切り替えて自分自身を取り除くだけで、ヒーローを再生成することはありません。

しかし、実際の弱点が 1 つ見つかります。最初のバージョンは、開始から 5 分の 1 秒後に 1 回だけヒーローのカメラを探し、二度と探し直しませんでした。その時点でヒーローがまだ存在していなかった場合や、あとで差し替えられた場合、そのセッションのあいだずっとズームは何もしません。これは実際に見た現象と一致します。

そこで AI はアクターを作り直しました。今度は毎フレーム、ヒーローの現在のカメラを探します。カメラが変わると、古いカメラの視野角を元に戻し、新しいカメラの通常値を記録して、照準をリセットします。そのうえで、まずメニューをクリックし、次に Z キーを押すという、プレイヤーと同じやり方でもう一度テストしました。

正直なレポート

続報のレポートは一読の価値があります。AI は、失敗を再現できなかったため、なぜ起きたのかを断言することも、直ったと約束することもできないと述べています。エディタ上では、変更の前後どちらでもズームは動作します。そして、テストの限界も挙げています。Z キーの入力は直接注入したもので、実際にキーを押し続けるテストは行っていないこと、またアクターは未保存のレベルにしか存在しないため、別のマップを実行すると何も起きないことです。そのうえで、AI は 2 つの質問をします。どのように起動したのか、そして今もまだ失敗するのか、です。

変更後の 2 回目の実際のプレイでは、正しく動きます。Play をクリックし、ヒーローが現れ、Z キーを押し続けると、カメラがズームインして Zoom の文字が表示されます。離すと滑らかに戻り、もう一度押し続けると、また動作します。

ズームのしくみをやさしく解説

アクターは毎フレーム、Z キーが押されているかを確認します。押されていれば、ブレンド値はブレンド時間をかけて 1 へ、押されていなければ 0 へ動きます。この 1 つの値は滑らかに変化します。カメラの視野角は、このブレンド値を使って通常値とズーム値を混ぜたものです。照準の不透明度にも同じブレンド値を使います。新しいバージョンでは、アクターはプレイヤーの現在のカメラを、1 回だけでなく毎フレーム探します。

ズーム値とブレンド時間は変数なので、2 つの数値を変えるだけで、穏やかなズームにも、スナイパーのようなズームにもできます。

拡張のアイデア

  • マウスの視点移動を遅くして、狙いを正確にするズーム。
  • 暗い縁取りがついたスコープのオーバーレイ。
  • 長押し式またはトグル式で、マウスの右ボタンに割り当てたズーム。

プロンプトをコピーして、ズームを 30 度に変えながら、AI が何を作るか試してみてください。

ズームプロンプトの 4 つのコツ

  1. 元の値を読み取って復元するよう AI に頼む。
  2. キャラクターが変わる可能性がある場合は、カメラを探し直すよう頼む。
  3. プレイヤーが遊ぶ流れ、つまりメニューから先にテストする。
  4. 実際のプレイで失敗したら、見たままを AI に伝える。

よくある質問

Unreal Engine 5 でズームを作るにはどうすればよいですか?

キーを押し続けているあいだ、カメラの視野角を通常値から小さい値へ滑らかに変化させ、離したら元に戻します。通常値は開始時に読み取り、まさにその値に復元してください。

ズームが AI のテストでは動いたのに、実際のゲームでは動かなかったのはなぜですか?

最初のバージョンは、開始から 0.2 秒後に 1 回だけヒーローのカメラを探していました。ヒーローがまだいなかった場合や、差し替えられた場合、ズームは何もしませんでした。AI は毎フレームカメラを探すように作り直しましたが、失敗を再現できなかったため、それが原因だと約束することはできない、とも述べています。

実際のプレイで失敗したときはどうすればよいですか?

見たままを同じチャットで AI に伝え、プレイヤーと同じやり方、つまりメニューから先にテストするよう頼んでください。

プロジェクトで試してみましょう

Ultimate Engine CoPilot で何が作れるかは 製品ページ でご覧いただけます。入手は Fab からどうぞ。AI Blueprint ジェネレーター のしくみもご覧ください。

このシリーズの他の作例: Unreal Engine スローモーション、Unreal Engine コンパスバー、Unreal Engine 遠距離武器。

どう思いましたか?

エディタで試してみよう
Unreal Engine 5 向けの 1,655 のツール。
プラグインを入手