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

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

【UE4】Chaosフィールドシステムの種類や動作について

はじめに

この記事はUnreal Engine 4 (UE4) その3 Advent Calendar 2020

25日目ラストの記事になります。

qiita.com

私の方からはChaosのフィールドシステムについて書いていきます。

UE4.26のgithubからの接続してエンジンビルドしたものを使用しています。

※新しく追加されたUE4.26Chaosではビルドしなくても同様のことが行えます。

※長々と説明していますが間違いやミスなどがあるかもしれないのでご注意ください。

Fieldシステムとは

FieldシステムとはGeometryCollection(Chaosの破砕表現を行うもの)に対して、

力を加えて破砕したり、剛体の制御のONとOFFなどの設定を行います。

Fieldシステムのプロジェクトは公式でサンプルも紹介されています。

www.unrealengine.com

主に設定するFieldシステムや応用方法などを紹介していきます。

プラグイン設定とGeometryCollectionの準備

Fieldシステムの設定については、

プラグインからFieldSystemをONにします。

プラグインの設定

プラグインの設定

プラグインを設定したら破砕させるための、

GeometryCollectionを作成していきます。

UE4.26のChaosプレビューでの設定方法になります。

破砕させたいモデルを選択して、モードのフラクチャを選択します。

モードからフラクチャを選択

モードからフラクチャを選択

選択すると様々なタブを選択できるようになるので、

Generateで新しいGeometryCollectionを作成します。

GeometoryCollectionの作成

GeometryCollectionの作成

Fractureタブを選択してモデルデータをどう分割するか選択します。

今回は一様化を選択します。

※以前までChaosと表示が実は変更されていて、

 左端上段のビュー設定と呼ばれる個所に変更されています。

一様化でのフラクチャ

一様化でのフラクチャ

実際にShow Bone Colorという左上のチェックを入れると実際に、

どのように分割されているかがわかります。

分割された結果

分割された結果

これで破砕するデータの作成は完了です。

AnchorFieldやClusterStrainについて

まずよく使うAnchorFieldやClusterStrainについて紹介します。

AnchorFieldはGeometryCollectionを固定するために使用します。

ブループリントの作成から、FieldSystemActorを選択して作成します。

FieldSystemActorの選択

FieldSystemActorの選択

作成したらFieldとなる領域やどこに配置しているか

分かりやすいようにキューブも配置します。

※わかりやすくするために半透明のマテリアルを指定してます。

各種コンポーネントと表示

各種コンポ―ネントと表示

それからFieldシステムを使用する際は必要なコンポーネントの、

CullingField・BoxFalloff・UniformIntegerを使用します。

CullingField → Field情報やCullingをFieldのコンポーネント

BoxFalloff → 力場の形状や減衰方法の指定

UniformInteger → Field内での影響状態を指定

それではそれぞれの設定についてそれぞれ説明していきます。

BoxFalloffではboxの形状や減衰方法や強さなどを指定します。

力場も種類があり主にBox・Plane・Sphereの種類があります。

BoxFalloff・PlaneFalloff・SphereFalloff3種類です。

BoxFalloffの設定

BoxFalloffの設定

それから先ほど指定したSetBoxFallOFF内の状態を指定します。

Magnitudeの数値に合わせていきます。

0がSleep状態でそれ以外の場合は動作します。

1:kinematick 2:Static 3:Dynamic 4:UserDefinedになります。

今回はstaticを指定しています。

Fieldの設定

Fieldの設定

あとはCullingFieldコンポーネントに各情報を設定していきます。

CullingにBoxFalloffの設定を接続して、

FieldのところにUniformIntegerを指定します。

※OperationでInsideとOutsideを指定できます。

 内側と外側にそれぞれ指定できます。

カリングの設定

カリングの設定

先ほどのCullingFieldの情報をFieldに追加してあげれば完了です。

※Enable:その設定を適応するかどうか

※Target(青色の方):FieldSystemComponentを指定します。

※Target(緑色のピンの方):どういった動きを行うかを指定します。

     今回はUniformalIntegerで指定したStaticを指定しているため、

     DynamicStateを指定してその状態を使用しています。

FieldにCullingFieldの情報を適応する。

FieldにCullingFieldの情報を適応する。

全体のBPは下のような画像になります。

AnchorFieldの全体像

AnchorFieldの全体像

実際にアンカー用のフィールドを配置するとこのような形になります。

一番左の半透明の黄色いフィールドがアンカー用のフィールドです。

アンカーフィールドで固定されている左端の物体は落下しません。

続きを読む

【UE4番外編】冬のゲームジャム祭りに参加してみました。

冬のゲームジャム祭りに参加しました。(・ω・)

今回はゲームジャムで作成したゲームの紹介と、

どんなことをやったのか紹介します。

作ったゲームはこちらになります。

www.youtube.com

優秀賞にはなれませんでしたが紹介していただきました。

ありがとうございました!

なぜ参加しようと思ったか

今回参加しようと思ったきっかけは、

オンライン開催で個人参加できたため参加させていただきました。

それと今まで試していなかったマケプレを試したいと思い参加しました。

使ったアセットの紹介と作った個所について

まず使用したアセットの説明からしていきます。

トラックゲームですがトラックの部分はアセットを使用しています。

docs.unrealengine.com

街並みも既存のマーケットプレイスのアセットを使用しています。

www.unrealengine.com

使用しているアセットはこちらのふたつのみです。

それでは実際にどのように作っていたか紹介していきます。

まずゲームのメインとなるトラック部分の改良になります。

トラックで改良した部分はサウンドの部分とグレイマンのみです。

トラックと貨物を接続した時に音を流す。

接続時のサウンド追加

接続時のサウンド追加

それから発信音やバックの音、エンジン音なども移動量に合わせて鳴らしています。

移動開始時のエンジン音の実装

移動開始時のエンジン音の実装

バックしていた時の実装

バックしていた時の実装

常時流すエンジン音

常時流すエンジン音

それからグレイマンですが、コントロールリグで座ってるポージングをさせています。

グレイマンの座ったポーズ

レイマンの座ったポーズ

コントロールリグについてはこちらに少し紹介しています(宣伝)

argonauts.hatenablog.jp

それから接続する荷物部分でも光の柱の設定をしました。

貨物の表示

貨物の表示

こちらについては縦の光については円柱とマテリアルを作成しています。

マテリアルは下になります。テクスチャを移動させてテクスチャと乗算した形です。

マテリアル作成

マテリアルの作成

あとは荷物に配置してちゃんと見えるようになっていることを確認しました。

荷物の表示

荷物の表示

ゲームのメインとなる部分は以上です。

あとはゲームインスタンスでスコアの保存や

スコアなどのブループリントを作成して時間などを表示しています。

ゲームメインのwidget

ゲームメインのwidget

タイマーなどは自身で作成しています。

1秒ごとの数値をあげていってそれを60で割った値を分に割り当て、
60で割った余りを秒で表示しています。

タイマーの更新

タイマーの更新

大まかに行ったゲームの動きは以上にまります。

他にも細かい部分を作成していますが、

1加算したりとかのみですので大まかな部分は省略します。

※聞きたい内容等ありましたらコメントいただけますと幸いです。

タイトル画面はグレイマンがいなくて寂しかったので、

レイマンのコントロールリグのキャラを置きました。

タイトル画面

タイトル画面

リザルト画面もWidgetで作成して、GameInstanceからゲーム情報を取得しています。

リザルト画面

リザルト画面

以上で行った作業の説明は終了です。

今後やゲーム開発について

現在まだ個人でのゲーム発表など販売しているゲームがないので、

ブログの更新をしつつもゲームの開発を進めていけたらと思います!