ネリスさん備忘録

主にUE4の備忘録を残すよ!

【UE4】今作ってるゲームっぽいもの

なにか特別なことができるわけではないけど、アクションゲームを作りたい。
youtu.be

 

とりあえず、ルートモーションで動けなくなるのが嫌だったからぶち壊してやることにした。

UE4のシステムに対しての冒涜かもしれないけど、ルートモーション中回転できないのが悪いんだ…

ただ、入力をNormalizeして角度を得るというたったこれだけのことに時間がかかってしまった。疲れてんのかな

f:id:LunaNelis:20200608022743p:plain

f:id:LunaNelis:20200608022750p:plain

 

とりあえず今できること

・3連続コンボ攻撃

・チャージアタック(攻撃後長押しでチャージ)

・敵のロックオン(UIがズレッズレだけど青い○がそれ)

 

これからしたいこと

・敵がこちらを向いて攻撃してくる。ダメージも受ける★

・回避アクション。くるっと一回転しながら強制的に前進する。★

 3回連続で出すことができる

・ロックオンした敵への追尾するジャンプアタック

・剣の軌跡エフェクト追加(無料アセットあるからそれ使おう)☆

・ダメージ表示(と付随する自キャラHP表示)

 

これだけ揃えばアクションゲームとしてそれっぽくなるはず。

 

近接相手への首振りとかもいずれ入れたい

 

 

【UE4】キーコンフィグ系で便利なの

https://historia.co.jp/archives/15422/

ちょっと難しい…ただ、最終的にソースがきれいになるのはすごいね。

導入してみたいけど、汚くとも同様のことができるなら努力目標っすね。

 

キーコンフィグプラグイン

http://papersloth.hatenablog.com/entry/2020/05/10/205424

まめおプラグインとか呼ばれてたやつ。

お手軽にキーアサインを書き換えることができちゃうすごいやつ

注意点は、プロジェクト設定で予めキーボードやゲームパッドに対応するキーを設定して置かなければいけないこと。

入れ替えだけで勝手に追加してくれたりしないのよね。

 

UIなどで入力を受け取る便利な方法

http://dfkfuturelab.hatenablog.com/entry/2017/03/16/011245

Widgetではインプットイベントを取れないため、isJustInput...なんとかというノードをプレイヤーコントローラーから受け取りIfで押したか判定して…とやる必要があった。

別にそれでも良いんだけど、「何を押したのか?」が取れないため、キーコンフィグ系のUIだったりするとこれが困る。

そこで入力イベントを取ってWidgetのイベントを呼び出すだけのActorを作ってしまおうというのがここの話。

確かタンッ…タタタタタタタってなるUIもこの方法で作れたはずなんだけど、さてさてどうやったもんかな…

 

ボタンのテクスチャセット

https://www.unrealengine.com/marketplace/ja/product/dynamic-platform-switching-controller-pc-icon-pack-light-theme?sessionInvalidated=true

シンプルで癖のないボタン。そんだけ。

値段もまぁ自分で100個とか書くよりはマシって絶妙な値段設定

 

GetPlayerCameramanagerについて

プレイヤーのカメラの向きとか取れる。

移動するときとか回転するときとか便利ね

 

【UE4】WorldAlignedTextureで一定の長さのテクスチャを連続でループさせる

テストステージで1メートル単位の線がほしい…そんなときに活躍するのが

WorldAlignedTextureというマテリアルノード。

ようするに、某格ゲーとかのトレーニングステージでよくあるアレができる。

f:id:LunaNelis:20200603014717j:plain

マテリアルの構成としてはこんな感じ。

1メートル(100)でこの網目状のテクスチャがループするようにできている。

非常にシンプルで、非常にお手軽。

f:id:LunaNelis:20200603014848p:plain

※ただし、オブジェクトの位置をしっかりあわせないとズレてるように見えるので要調整。動くオブジェクトだと、スイミングという現象が起こる

 

ちなみにこのノードはScaleをかけたりしたときにテクスチャが伸び伸びになってしまうことを防ぐことができるノードで、レンガの道や壁のような、スケール感が変わると困るようなテクスチャに使うと非常に便利。

 

おまけ。

エミッシブカラーに発光できる状態で設定を行えば、お手軽サイバー空間になるよ

f:id:LunaNelis:20200603015654j:plain

 

【UE4】敵がプレイヤーキャラクターからみて正面にいるかどうかを調べる!

キャラクターの正面方向にいる敵を自動的にロックオンして追尾する攻撃をしたいなぁ

なんて考えているとき、色々考えたけど結局こういう形に落ち着いた。

f:id:LunaNelis:20200601023858p:plain

 

今回はMultiSphereTraceForObjectsノードで取得したActorの配列を

ForeachLoopで順番にチェック

 

で、まずは自分のキャラクターの座標と相手の座標をFindLookRotationノードで

自→相手の向きを計算する。

今回は上下については不問とするので、チェックするのはZ軸のYawだけでOK

 

自キャラのYawと引き算をして、その絶対値が小さければ小さいほどキャラクターの正面に近い相手となる。

(帰ってくる数値は度)

 

そして、「<45」のようにすれば指定した角度内の相手だけを抽出できる。

これを使うことで、コーン型範囲内の敵をロックするといったことができたりする。

 

近い敵をロックオンとかはよく記事にあるんだけど、キャラの正面かどうかって地味ーな内容ってあんまりなかった気がする。

 

何かには使えるでしょう。

【UE4】時止め演出で使ったポストプロセスマテリアルの話

lunanelis.hatenablog.com

前回からの続き。
 
時止め演出の演出で使ったポストプロセスマテリアルの話をば
まずは全体像。これだけだけど、初めて見るとすげー複雑に見えるかも。

f:id:LunaNelis:20200509022900p:plain

というわけで分解して考えてみることに。
まずはここ

f:id:LunaNelis:20200509023044p:plain

第一目的は画面全体をグレースケール化して、白黒な画面に変えること。
「グレースケール」というコメントの中がその対応。
RGBをそれぞれDotノードで掛け合わせるといい感じに灰色になる。
この際、Maskノードをかけておかないと怒られちゃうので注意。
 
でも、これだけだと自分も灰色になってしまい、「世界」っぽくないので
自分だけは色を残したい。
そこで使うのがCustomDepthなるもの
キャラクターのMeshの設定のRenderingの▽の中に
RenderCustomDepthPassという名前の項目があるので、チェックを入れると
設定完了。マテリアルで使えるように。
 
SceneTexture:CustomDepthという赤いノードで取得することができ
CustomDepthが設定されているMeshは白く、それ以外は黒いという情報になる。
これを使い、「自分だけグレースケールの範囲外」にする
 
1.自分がいる場所は通常の色を適応する
2.自分以外の場所をグレースケール化する
3.1と2を足し合わせて、「自分だけが色のある状態」が完成する
 
ただ、自分の手前にモノがあった場合、その色が出ちゃうのでそこはカットしないといけない…
 
そして、下段の部分について

f:id:LunaNelis:20200509025518p:plain

時を止めたとき、グワーッと広がるような演出にしたいと思ったので作る。
やってること自体は単純で、円を拡大していくことと
その円をマスクとして使って上記のグレースケールの表示範囲を拡げること。
 
特に考えることもないんだけど、1個だけ注意点が。
ポストプロセスマテリアルはほかのマテリアルと違って値を直接渡せない。
なので、円がどれくらい広がったかをこちらから指定するには一工夫必要
 
それがマテリアルパラメータコレクションなるもの。
これを作成し、パラメータを作成し
マテリアル内で呼び出す。(画像ではPowerという名前の緑のでっかいやつ)
呼び出すときはCollectionParameterという名前のノード。

f:id:LunaNelis:20200509030220p:plain

中を見てみると、CollectionとParameterNameという項目があり
Collectionには自分が作成したマテリアルパラメータコレクションを
ParameterNameには作成したパラメータの名前を選択していれる。
 
そして、どこかでこのコレクションのパラメータに対して数値を設定すると
マテリアル内のパラメータも変化させられるのだ
 
で、数値の設定方法がこれ

f:id:LunaNelis:20200509030613p:plain

今回は徐々に大きくしたいので、パラメータを取得し、ちょっと数値を変化させてそれを設定するということにした。
これだけで変わるなんて楽だなぁ…
 
というわけで雑だけどこれ以上丁寧にしたら長くなりすぎちゃうのでここまで。
まぁ備忘録みたいなもんだしええか…ええか…?
 

【UE4】CustomTimeDilationでDIOになる【時止め】

あ~くまのち~から~みに~つ~けた~

youtu.be

というわけで、時止めの力を手に入れました!
CustomTimeDilationというパラメータを設定することで、
そのActorの実行速度を増減することが可能となるわけですねぇ
 
つまり、自分以外のCustomTimeDilationを0にすることで、自分だけの「世界」を実現できるのだ
これ2つ前の会社にいるときに知ってればなぁ…と今更ながらに思う
 
ちなみに、この機能を使うことで必殺演出中の他キャラクターの動作を止めて
演出をバッチリ見せるけどその間にゲームが勝手に進まないようにしたり
ポーズメニューでキャラの3Dモデルを表示したいなんてときに
ポーズ画面で出すキャラ以外を停止させるなんて使い方もある。すっげー便利だね
もちろん、ヒットストップ演出としても優秀なので使い方はいろいろ
まさに悪魔の力
 
で、実装の話
時間停止用キーを押したらこれが動くように設定
 

 

f:id:LunaNelis:20200509022319p:plain

今回はキャラクター全部を探してきて、自分だけ除外して、
自分以外のすべてのキャラクターのCustomTimeDilationを0にして完全停止させるというもの。
 
時間停止が終わったら同じ要領でCustomTimeDilationを1にすることで時が動き出す。
ね、簡単でしょ?
 
動画ではポストプロセスマテリアルでアニメ、アーケード版の演出っぽいのをしてみたけど、それは次回紹介する。