2021/6/14エンジニア

    [UE4]FPS視点で箱を持ち上げる機能をつくる

    執筆: HK

    はじめに

    Unreal Engine 4のFPSテンプレートでは弾を撃つ機能がありますが、別の方法でもゲーム内に干渉できる方法があると遊びの幅が広がります。

    今回は、箱をつかんで動かせるような機能を実装してみます。

    この機能によって、パズルアクションゲームの1要素などを作れるのではないかと思います。

    実行環境

    • Unreal Engine 4.26.2

    プロジェクトの作成

    1. “Games”カテゴリーのProjectを作成します。

    1. “First Person”Templateを使用します。

    1. 下記設定でProjectを作成します。

    1. Project名はPickUpProjectにでもしておきましょう。Create Projectをクリックしてプロジェクトを作成します。

    「持ち上げられる箱」のActorを作成する

    1. Contents BrowserのContent\FirstPersonBP\Blueprintsで右クリックをして”Blueprint Class”をクリックします。

    1. 親クラスとしてActorを選択します。

    1. 新しく作成したBlueprint Classの名前を”PickUpActor”にします。

    1. Contents BrowserでPickUpActorをダブルクリックしてBlueprint Editorを開きます。
    2. Blueprint Editor左上のComponentから”Add Component”をクリックします。
    3. “Add Component”をクリックして表示されるリストの中から”Cube”をクリックします。

    1. ViewportにCubeが表示されればOKです。

    1. 念のためCompileしてSaveしておきましょう。
    2. 以上で「持ち上げられる箱」のActorの作成は完了です。

    FirstPersonCharacterに機能を実装する

    下準備(競合する機能の無効化・変数の追加・関数の追加)

    1. Content\FirstPersonBP\Blueprints\FirstPersonCharacterをダブルクリックしてBlueprint Editorを開きます。

    1. 今回の機能ではクリックを使用した操作がしたいので、FirstPersonテンプレートで初めから実装されている射撃機能を無効化します。
      1. InputAction FireのPressedから伸びているワイヤーを切断します。

    1. FirstPersonCharacterに変数を追加します。
      1. PickUpActor型の”HoldingActor”という名前の変数を追加します。
      2. この変数は、プレイヤーが持っているPickUpActorを参照するためのものです。

    1. 関数を追加します。
      1. PickUpActorを「拾う」ための”PickUp”と「離す」ための”Release”を追加します。

    PickUp関数の実装

    1. PickUp関数のInputにFloat型の”EffectiveLength”という変数を追加します。
      1. 後に、どの距離までのものを拾えるか指定するために使用します。
    2. PickUpActorを検出するために、カメラ位置からEffectiveLengthで指定した距離だけLineTrace(レイキャスト)をする部分を下記の画像のように実装します。

    1. LineTraceのHitResultにPickUpActorがあれば処理を続行します。

    1. 今回は、単純に箱を持ち上げたいのでPickUpActorの物理やCollisionを無効化してカメラにAttachします。

    1. 以上でPickUp関数の実装は完了です。

    Release関数の実装

    1. Release関数では、現在PickUpActorを持っているかを検証し、持っていればDetachFromComponentによって離します。離した後、SetSimulatePhysicsやSetCollisionEnabledによって物理やCollisionを再度有効化します。最後に、プレイヤーが持っているPickUpActorを示す変数”HoldingActor”にNullをSetします。

    1. 以上でRelease関数の実装は完了です。

    左マウスボタンで機能を使えるようにする

    • FirstPersonCharacterのEvent Graphに下記の図のように実装することで、左マウスボタンから箱を持ち上げたり離したりできるようになります。
      • PickUp関数のEffectiveLengthの値には1000を入れておきます(10メートルまでの範囲の箱を持ち上げられる設定にします)。

    機能を試してみる

    PickUpActorをLevelにドラッグアンドドロップして配置します。

    PIEで、箱にクロスヘアが向いている状態で左マウスボタンを使って箱を持ち上げてみましょう。

    まとめ

    左クリックで箱を持ち上げる機能を実装してみました!

    今回は単純な箱を持ち上げられるようにしてみましたが、この箱の見た目を変えてみたりですとか、箱を乗せると動作するスイッチのようなギミックを追加する、同時に複数の箱を持てるようにすることなどで遊びの幅を広げていくことができると思います。

    関連リンク