アルゴンUE4/UE5&アプリ開発日記

UE4/UE5の機能やプラグインを紹介します。初心者や中級者向けになってます!!

【UE4小ネタ】スローモーション実装方法について考える

様々なスローモーションを考える(*'▽')

今回は小ネタになりますが、

様々なスローモーションの実装についていろいろ紹介したいと思います。

UE4.27.2を使用しています。

間違いや誤字脱字等ありましたらコメント等いただけますと幸いです。

コマンドで行う方法

まずはコマンドで全体にスローモーションをかける方法になります。

コマンドの「Slomo 〇〇(数値)」というコマンドを入力すると、

1以上で早送りで0.5などを設定するとスローモーションが実行されます。

実行中に@キーを押すとコンソールコマンドを入力できます(デフォルトの場合)

コンソールコマンドで実行

コンソールコマンド入力のショートカットはエディタの環境設定で変更可能です。

スタートメニューのエディタの環境設定の場所

エディタのコンソールで検索するとショートカット設定が表示されます。

エディタの環境設定でのショートカットキー変更

BP上でコマンドを行う処理を動作させることで実行できたりします。

※コンストクタスクリプトでは動作しないので注意してください!

コマンドを実行するBP

・目次に戻る

用意されているBPで行う方法

BPの方で用意されているのは2つありまして、

ゲーム全体の流れるスピードを決めてるGlobalTimeDilationの数値を変更する方法と、

Actorごとの個別に設定するCustomTimDilationの数値を変更する方法があります。

※全体にスローモーションを設定する方法

 コンストクタスクリプトでは動作しないので注意してください!

SetGlobalTimeで変更する方法

全体のスローモーションを行う場合はSetGlobalTimeDilation関数を使います。

こちらはUGamePlayStaticsクラスで用意されています。

クラスを理解していると開発の幅が広がるかなと思うのでリンク張っておきます。

※Actor個別にスローモーションを設定する方法

CustomTimeDilationでActor個別のスローモーション

Actor個別のスローモーションを行う場合はActor側で用意されている、

CustomTimeDilation変数に数値をセットする形になります。

AActorClassの方に用意されている変数ですが各キャラクターのClassで、

AActorを継承しているため使用できています。

CharacterClassの各関数もこちらに記載があるのでよかったらどうぞ。

以上が用意されたBPを使用したスローモーションの実装になります。

・目次に戻る

キャラクターの動きを編集して行う方法

最後に紹介する方法はキャラクターのアニメーションや動作スピードなどを、

変更することでスローモーションにさせるというものです。

※端的に言えばただの力業です・・・

ただパラメーターを変更ことなので、
例えばキャラの一部分だけスローにしたいとか細かい部分の、

スローモーションを実装する時には少しは役に立つのかな???と思い書きました。

スローモーション用のCharacterパラメーター編集

実際に設定したパラメータはこんな感じです。

CharacterMovement内で解決するパラメータでできるので案外簡単です。

実際に動作させたものはこんな感じです。

以上がキャラクターの動きを編集して行う方法でした。

・目次に戻る

最後に

今回はスローモーションに特化した小ネタを書いてみました。

個人的な意見ですが各アクター個別に設定できる、CustomTimeDilationで設定して

力技がいるぐらい細かい設定をするときは自身で調整するのがいいのかなと思います。

【UE4】DataAssetを応用した武器の取得と捨てる動作

DataAssetで武器を拾ってみよう!

今回はDataAssetの使い方を学ぶべく

DataAssetの情報を応用して武器の取得と捨てるのをやります!

そもそもDataAssetがどういったものかよく分かっていない方は、

こちらの初心者向け情報を記載したのでこちらもご確認いただければと

UE4.27で作成しています。
※サードパーソンテンプレートを使用しています。

※やり方などを紹介していますがこれが完璧な仕組みだ!
 というわけではないので参考程度に見ていただければ幸いです。

実際に作成したものはこちらになります。

各種素材やモデル情報について

モデルについては下記のマケプレを使用しています。

UE4.27には対応していないので過去バージョンのプロジェクトに入れた後、

 プロジェクトをアップデートして移行して使用してます。

武器を拾うインプットの設定

武器を拾うためのアクション用インプットがないので、

まずはプロジェクト設定のインプットからアクションを設定します。

今回はTキーでピックアップして、Yキーでドロップします。

プロジェクト設定のアクションの追加

・目次に戻る

拾う処理と武器BPの作成

実際に拾う処理を作成していきます。

まずは拾うアニメーションをキャラクターの操作に入れていきます。

今回もAnimationBPから設定します。

下記リンクの「アニメグラフの編集とアニメーションBP編集」と同じ設定をしてます。

続いて武器のBPですがDataAsset用のBPとDataAssetを作成します。

今回はこんな感じで設定しています。

DataAsset用のBP変数設定

実際に設定したDataAssetは以下になります。

※各パラメーターは武器を拾ったり捨てたりするタイミングで使用します。

DataAssetの動き

設定が完了したら武器用のBPを作成します。

コンポーネントはSkeletalMeshとBoxCollisionを用意します。

その他に関数を一つ用意されていますがこちらは、

武器を装備する際に武器モデルに物理処理を消すSetPhysicsOffを作成してます。

変数としては以下を用意しています。

WeaponCollision → 武器を拾える範囲のコリジョン

WeaponMesh → 武器のモデル

BP_GunParam → DataAsset用の情報BP

Character → 武器をアタッチするThirdPersonCharacterBP

武器BPの各種変数設定

下記はBeginPlay時の処理になります。

〇処理の流れについて〇

1.武器を拾える範囲を指定

2.武器のモデルをセット

3.物理を機能させるかのフラグをセット

武器BPの作成

下記は実際にキャラクターが武器を拾う処理になります。

〇処理の流れについて〇

1.BeginOverlapしたのがキャラクターの場合武器を拾うアクションを許可する。

※逆にその範囲内に入っていない場合はEnableInputをOFFにして入力を受けない。

2.もし許可されている場合はキャラクターのほうで用意されている装備処理を行う。

武器を拾う場合の処理

武器を拾う際に武器の物理を消す関数を用意しています。

〇処理の流れについて〇

1.武器を拾える範囲のコリジョンを削除する。

2.SimulatePhysicsをOFFにしてCollisionEnableをNocollisionに変更する。

武器を拾った際の各種コリジョンや物理のOFF

武器側の処理のプログラムはこちらで完了です。

今度は拾う側のキャラクター側の処理を行います。

キャラクターのほうでも変数とマクロを設定しています。

◆作成したマクロ◆

GetDropLocation → 武器を落とす位置情報を生成するマクロ

NextEquip → 次に装備する武器の情報を生成するマクロ

◆作成した変数◆

EquipWeapon → どの系統の武器を装備しているかチェックしているフラグ配列変数

EquipWeaponModel → 武器のモデルを整数値をキーにしたマップ変数

WeponWidget → 武器情報が載ってるUMG

isPickup? → 拾っているアニメーションのON.OFFフラグ

EquipWeaponType → どのタイプの武器しているか保持する変数

キャラクター側の変数とマクロ

最初の処理としてUMG用の変数WeponWidgetをBeginPlayで設置します。

Viewに追加する処理

武器を拾う処理ですが少し長いので画像を2つにしてます。

〇処理の流れについて〇

1.武器を持っているかEquipWeaponフラグの配列からチェック。

2.持ってなければフラグをONにして拾うアニメーションを実施。

3.先ほど紹介した武器の物理を削除する関数(SetPhysicsOFF)を呼び出して物理OFF

キャラクターが武器を拾うための処理1

4.装備するモデルをEquipWeaponModelに保持するため追加する。

5.武器表示のUMGを更新してキャラクターのソケットにアタッチする。

※アタッチするソケット名は武器のAssetDataのEquipSocketと同じにします。

※UMGの関数の説明は「拾った後のUMGの変更と武器を捨てる処理」で説明します。

武器を拾って装備するための処理2

ソケットについてはThirdPersonCharacterのボーンに設定します。

各種武器をアタッチするためのソケット処理

以上が武器を拾ったときの処理の流れになります。

・目次に戻る

拾った後のUMGの変更と武器を捨てる処理

続いてUMGの処理になります。

今回はVerticalBoxに武器名・武器画像・武器の弾数を縦に表示する形で作成してます。

UMGのデザイン

処理としてはカスタムイベントを作成して各パーツの情報をセットします。

※武器を拾った際の処理(DataAssetの武器情報をセット)

武器を拾った際のUMGの変更処理

※武器を捨てた際の処理(武器を装備してるか確認してDataAssetの武器情報をセット)

武器を捨てるUIの処理

UMGの説明も完了したので実際にあれをする時間になります。

〇処理の流れについて〇

1.武器を持っているかEquipWeaponフラグとモデル情報をチェック

2.持っている場合はEquipWeaponフラグをOFFにして、Dettachでモデルを削除

どの武器をドロップするかの処理

3.削除した武器のタイプを元に武器をSpawnする(これが落としたモデルになる。)

※GetDropLocationマクロで位置を指定しています。

4.NextEquipマクロで次に装備するための武器を選択します。

落とした武器を出現させる処理

最後にGetDropLocationのマクロとNextEquipのマクロについて説明します。

GetDropLocationは向いている方向と自分の位置を計算したその位置を返しています。

武器をSpawnする位置情報生成マクロ

NextEquipはForEachLoopでどの武器を持っているかチェックして、

次にセットする武器を配列のインデックスで指定しています。

次の武器を選択するマクロ

以上がDataAssetを用いた武器の取得と捨てる動作の実装でした。

・目次に戻る

最後に

DataAsset応用編は以上になります。

20分ぐらいで考えたロジックなので穴とか拡張性ほぼ皆無ですが、

まあ私ならこうするとかあってもいいのかなと思ったので書きました!

・目次に戻る