Findノードとは何か!?

Findというノードがあります。

f:id:Free_Gamer:20190530213654p:plain
これは、

Bの値が、

Aの配列内にある値と

一致するものがあれば

一致した値の

インデックス値を返す

 

ノードです。

 

 

例えば・・・

Name(名前)型の配列変数

普通の変数を用意し、

画像のようにします。

f:id:Free_Gamer:20190530213633p:plain
TestArray・・・配列

TestName・・・普通の変数

 

↓配列内はこんな感じに。

f:id:Free_Gamer:20190530211151p:plain

 

普通の変数には、

配列内にある

いずれかの値(文字)を入れます。

f:id:Free_Gamer:20190530212917p:plain

例えば、「木」にしましょう。

 

これでプレイすると・・・

f:id:Free_Gamer:20190530211740p:plain

f:id:Free_Gamer:20190530211754p:plain

 

「3」と表示されるはずです。

 

 

何故なら、

配列内には「木」という値がある。

f:id:Free_Gamer:20190530211949p:plain

普通の変数に入れた値は「木」

f:id:Free_Gamer:20190530213755p:plain

「木」という値が一致したので、

一致したインデックス値は「3」を返す。

という感じです。

 

 

ちなみに・・・

 

普通の変数の値が、

配列内にある値と

何も一致しなかった場合

果たしてFindノードは

いくつのインデックス値を

返すでしょうか??

 

答えは「-1」です。

 

一致するものが無い場合、

Findノードは

「-1」を返します。

 

試しに、普通の変数に配列内には無い

全く関係ない値を入れましょう。

f:id:Free_Gamer:20190530214428p:plain

 

これでプレイすれば・・・

f:id:Free_Gamer:20190530214531p:plain

f:id:Free_Gamer:20190530214550p:plain

 

「鼻くそ」

配列内には無いので、

「-1」を返します。

 

今回はここまで!それではまた!^^ノシ
 

 

 

魚眼レンズの実装方法! 『あるもの』を使えば   簡単に実装可能!

P.T.

 

というホラーゲーム、ご存知でしょうか?

 

f:id:Free_Gamer:20190509235307j:plain

あのMGSで有名な小島監督が作った

ホラーゲームです。

知らない人はggってね。

 

さて、このP.T.。恐怖を掻き立てる為に

色々な要素や演出が

盛り込まれているのですが・・・

 

その恐怖を掻き立てる要素の一つに・・・

 

魚眼レンズ

 

があるのです。

 

よく見てみると・・・

 

右側の壁の輪郭が

若干曲線になってるのが

分かりますでしょうか??

f:id:Free_Gamer:20190509235737j:plain

曲線が分かりやすくなるように、

近くに赤い真っ垂直な赤線を引きました。

魚眼レンズの影響で

外側の物体が反っているのが

分かると思います。

f:id:Free_Gamer:20190510000141p:plain

 

今回はその

 

魚眼レンズの

実装方法

 

を紹介します!

 

そのためには

必ず必要なものがあります!

 

それは・・・

 

↓このアセットです!

f:id:Free_Gamer:20190510000843p:plain

この

 

「ChameleonPostProcess」

 

というアセットは、

ポストプロセスを使って、

画面にあらゆるエフェクトを

掛けることが出来るアセットです。

(2019年5月中はずっと無料です。タダで手に入れるなら今!)

 

UE4に最初っから備わっている

ポストプロセスマテリアルの拡張版

といった感じの解釈でいいと思います。

 

このアセットを使えば、

魚眼レンズを

秒で作れます!

 

 

「ChameleonPostProcess」を

プロジェクトに追加。

 

コンテンツフォルダに

「Chameleon」

というフォルダがあるので、

それをダブルクリック。

f:id:Free_Gamer:20190510002058p:plain

「Chameleon」という名のBPがあるので、

f:id:Free_Gamer:20190510002313p:plain

それをレベル内にD&D(ドラッグアンドドロップ

f:id:Free_Gamer:20190510002441p:plain

 

レベル内に置いた

「Chameleon」を選択し、

詳細パネルにある

「MonitorEffects」という項目を

見つけましょう。

f:id:Free_Gamer:20190510002624p:plain

 

「MonitorEffects」

チェックを入れると・・・

f:id:Free_Gamer:20190510002959p:plain

モニター画面風になります。

この時点でもう魚眼レンズになっています。

f:id:Free_Gamer:20190510003038p:plain

 

ですが、

 

画面にかかってる

モニター風の

細かいラインが邪魔!

 

という場合は・・・

 

「MonitorEffectsLineCount」の値を

「1000」から「0」にすれば・・・

f:id:Free_Gamer:20190510003554p:plain

ラインが「0」本になって、

完全に消えます。

f:id:Free_Gamer:20190510003635p:plain

 

ただ、このままだと

全体が緑に染まっていて、

気になりますね。

 

これを無くす場合は・・・

「MonitorEffectsIntensity2」

の値を、「0」にします。

f:id:Free_Gamer:20190510005251p:plain

はい。

これで魚眼レンズの完成です。簡単でしょう??

f:id:Free_Gamer:20190510005404p:plain

 

更に、

 

魚眼レンズによる

画面の「反り」

 

を調整したい場合は・・・

 

「MonitorEffectsDistortion2」の値を

調整すれば変更可能です。

f:id:Free_Gamer:20190510010511p:plain

 

値「1」

かなり反っています

f:id:Free_Gamer:20190510010651p:plain

値「0」

全く反らない。

もはや魚眼じゃない。

f:id:Free_Gamer:20190510010730p:plain

 

 

 

 

P.T.のような、魚眼レンズで

臨場感と恐怖感を掻き立てるような

ホラーゲームを作りたい場合には、

役に立つ内容だと思います!

 

それではまた!^^ノシ

 

 

FPS(フレームレート)の変更方法!

キャラクターBPとレベルBP

どっちでもいいので、

イベントグラフに
以下のような処理を組みます。

f:id:Free_Gamer:20190506230208p:plain

「1」キー・・・「30FPS」に変更

「2」キー・・・「60FPS」に変更

「3」キー・・・「120FPS」に変更

「4」キー・・・「FPSを無制限」に変更

 

コンソールコマンドを使って
FPSを変更しています。

 

使用するコマンドは、

「t.MaxFPS 〇〇」


です。

 

〇〇の部分に、
設定したいフレームレート値を入れます。

60FPSなら、「t.MaxFPS 60」です。

 

FPSとフレームレート値の間は、
必ずスペースを空けましょう。

じゃないと、動作しません。

 

×→「t.MaxFPS60」

〇→「t.MaxFPS 60」

 

動作確認をしましょう。

 

FPSをリアルタイムで見るには、

ビューポート左上の「▼」をクリック。

FPSを表示」を選択しましょう。

f:id:Free_Gamer:20190506231434p:plain

ビューポート右上に、FPSが表示されます。

f:id:Free_Gamer:20190506231627p:plain



プレイして確認です。

各キーを押して、
しっかりとFPSが変更されていれば成功です。

 

 

それではまた!^^ノシ 

 

 

 

 

 

PhysicsAnimationコンポーネントで、酔っぱらいを作ってみようか!

↓今回は、酔っぱらいのおっさんみたいな「ふにゃふにゃ人間」を作っていきます!

f:id:Free_Gamer:20190506195247p:plain

 

そのためには・・・

 

PhysicsAnimationコンポーネント

 

を使います!

 

PhysicsAnimationコンポーネントを使えば、

物理シュミレーションベースのアニメーションをさせることが出来ます!

 

言葉ではあまりピンと来ないと思うので、

実際にやってみましょう!

 

↓キャラクターBPに処理を組んでいきます!

~キャラクターBP~

f:id:Free_Gamer:20190503022509p:plain

コンポーネント

PhysicsAnimationコンポーネントを追加

f:id:Free_Gamer:20190506194714p:plain

↓追加されると、以下の画像のようになります。

f:id:Free_Gamer:20190506200527p:plain

CapsuleComponentのCapsuleRadiusの値を「21」にします。

f:id:Free_Gamer:20190506201613p:plain

絶対に「21」でないとダメという事はありません。

キャラクターの両腕がCapsuleComponentからはみ出ていればいいです。

f:id:Free_Gamer:20190506201837p:plain


変数

f:id:Free_Gamer:20190506200651p:plain

BoneName・・・物理シュミレーションを適用したいボーン名を入れる変数。

        とりあえずデフォルト値は「Spine_01」

OrientationStrength・・・デフォルト値「1000」

AngularVelocityStrength・・・デフォルト値「100」

 

コリジョン

Meshコンポーネント「CollisionEnabled」

「PhysicsOnly(NoQueryCollision)」にします。

物理シュミレーション時に、コリジョンを有効にするという感じです。

「CollisionEnabled(Query and Physics)」でも可能です。

f:id:Free_Gamer:20190506201233p:plain

 

イベントグラフ

f:id:Free_Gamer:20190506200721p:plain

プレイ開始時、MeshにPhysicsAnimationコンポーネントを適用

f:id:Free_Gamer:20190506200950p:plain

指定したボーン(BoneName)に、PhysicsAnimationコンポーネントのパラメーターを適用。

指定したボーンの物理シュミレーションを適用。

f:id:Free_Gamer:20190506201036p:plain

 

これで完了です!

 

これでプレイしてみると・・・

youtu.be

上の動画のように

 

非常にだらしない人間になったとおもいます!(笑)

 

壁にぶつかったり、ジャンプしたりすると、体が面白い感じでねじ曲がったり、振り回されたりするので、動かしているだけでも非常に面白いですね。

 

OrientationStrength

AngularVelocityStrength

の値を変えてみて、挙動の変化を楽しんでみてください!

 

それではまた!^^ノシ

 

PredictProjectilePathByTraceChannelを使って、グレネードもどきを投げてみよう!

かなりのお久です。

もう僕の存在なんて忘れてしまったのではないでしょうか??(笑)

そもそも、端(はな)から僕の存在を知っている人がいるかどうかも疑問です(笑)

 

さて、自虐的な前座はここまで!本題に入りましょう!

 

↓今回やりたいことはこれ!!

f:id:Free_Gamer:20190503021749j:plain

(画像はTheLastOfUsというゲームのものです)

 

軌道に沿って、物を投げる方法!!

 

です!

 

youtu.be

 

キャラクターBPと投擲物(投げる物)のBPに処理を組んでいきます!

 

~キャラクターBP~

f:id:Free_Gamer:20190503022509p:plain

コンポーネント

Sceneコンポーネントを追加します。

f:id:Free_Gamer:20190503022717p:plain

↓キャラの腹あたりの位置に置きましょう。

f:id:Free_Gamer:20190503022743p:plain

このSceneコンポーネント

物を投げ始めるときの位置です。

 

変数

f:id:Free_Gamer:20190503024607p:plain

VelocityVector・・・デフォルト値「X:1000」「Z:1000」で。

 

イベントグラフ

↓最終的な完成図です

f:id:Free_Gamer:20190503023112p:plain

 

物を投げるモードの切り替え

f:id:Free_Gamer:20190503023250p:plain

 

軌道計算

ゲーム製作上、Tickはなるべく使わない方がいいのですが(処理負荷的に)

今回はそのような考慮は除いています。

物を投げるモードがONの時、軌道計算を行います。

f:id:Free_Gamer:20190503023402p:plain

物を投げる時の方向・速度を計算

f:id:Free_Gamer:20190503023613p:plain

軌道計算

PredictProjectilePathByTraceChannelというノードは

指定した位置(StartPos)から指定した速度(LaunchVelocity)で投げた時の軌道を計算してくれます。

f:id:Free_Gamer:20190503023902p:plain

 

PredictProjectilePathByTraceChannelの

各項目についてサラッと解説

f:id:Free_Gamer:20190503025835p:plain

StartPos・・・スタート位置

LaunchVelocity・・・投擲速度

TracePath・・・トレースが何かにヒットした時

        トレースを貫通させないか(True)

        トレースを貫通させるか(False)

ProjectileRadius・・・トレースの球体半径

TraceChannel・・・コリジョンチャンネル

TraceComplex・・・知らん

Actors to Ignore・・・知ってるようで知らん。結局知らん

DrawDebugType・・・トレースの描画方式

DrawDebugTime・・・トレースの描画時間

SimFrequency・・・トレースの球体個数。例)「5」→球体が5個描画される

MaxSimTime・・・トレースの描画距離。値が大きい程トレースの描画距離が延びる。

OverrideGravityZ・・・重力。値が大きいほど、トレースは上に反って描画される。

 

ざっとこんなもんです。完全に己の勘です。どっか間違ってるかもw

まあよくわかんなかったら試してみてください(笑)

 

物を投げる

物を投げるモードONの時、投擲可能

f:id:Free_Gamer:20190503024119p:plain

Sceneコンポーネントの位置から物を投げる

f:id:Free_Gamer:20190503024222p:plain

物を投げる時の速度を設定

f:id:Free_Gamer:20190503024259p:plain

VelocityVectorの

「X」の値は、大きい程、遠くまで飛びます。

「Z」の値は、大きい程、高く飛びます。

 

ただ、「Z」の値があまりにも大きいと前に物を投げたいのに、

後ろに投げてしまう現象が起きますw

色々試して、ちょうどいい値を探ってみて下さい(適当)

 

 

~投擲物BP~

コンポーネント

f:id:Free_Gamer:20190503024845p:plain

↓Granade・・・スフィアコンポーネントにしました。

f:id:Free_Gamer:20190503025154p:plain

スフィアのサイズは、軌道に沿ってるか確認したい為、小さめにしてます。

f:id:Free_Gamer:20190503025538p:plain

↓スフィアコンポーネントコリジョン設定

f:id:Free_Gamer:20190503025627p:plain

ProjectileMovementは特に何も設定しません。

f:id:Free_Gamer:20190503025502p:plain

 

これで完了です!

先に挙げた動画のようになると思います!

 

ちなみに・・・

 

PredictProjectilePathByTraceChannelの

SimFrequencyの値は、「1」以上じゃないと、軌道通りに物が飛んでくれません。

実際試してみると分かるのですが、投げたものが軌道からズレていくと思います。

なので、SimFrequencyに入れる値は「2」以上が良いでしょう。

 

それではまた!^^ノシ

飛ばした矢の突き刺し方!

飛ばした矢やダーツのような発射物を
ヒットした位置に突き刺す方法
です。

きっとダーツゲームや弓矢ゲーム

あるいは、人殺しダーツゲームや人殺し弓矢ゲームできっと役に立つでしょう。(^^)

 

↓以下のようなことが出来ます!

youtu.be

 

※ファーストパーソンテンプレートを使用してます

 

 

~矢の作成~

↓「Arrow(矢)」という名のActorを作成しました。

f:id:Free_Gamer:20190402231428p:plain

f:id:Free_Gamer:20190403005044p:plain

コンポーネント

f:id:Free_Gamer:20190402233746p:plain

CollisionComponent・・・当たり判定を取るためのコンポーネント

Arrow・・・飛ばすもの(矢とかダーツとか)

Projectile・・・物を飛ばすためのコンポーネント

 

↓CollisionComponentは、矢のちょうど真ん中あたりに来るようにしている。

f:id:Free_Gamer:20190403010227p:plain



↓CollisionComponentのコリジョン設定

f:id:Free_Gamer:20190402233639p:plain

↓Arrowのコリジョン設定

f:id:Free_Gamer:20190402235633p:plain

 

 

~矢を飛ばした時に、弧を描きながら飛ばす方法~

Projectileコンポーネントの詳細パネルにある「Projectile項目」にある

「RotationFollowVelocity」にチェックをつけます。

f:id:Free_Gamer:20190403000158p:plain

「RotationFollowVelocity」にチェックをつけた場合と、つけていない場合を見比べてみましょう。↓

 

RotationFollowVelocity「ON」

youtu.be

RotationFollowVelocity「OFF」

youtu.be

一目瞭然ですよね。

RotationFollowVelocityを「ON」にしている方が、いかにも矢という感じがしていいですよね。

 

 

~矢がヒットした位置に、矢を突き刺す~

↓「Arrow」のイベントグラフ

f:id:Free_Gamer:20190403001549p:plain

矢のヒットした位置に、「StaticArrow」という
「何かに突き刺さった用の矢」をスポーンしています。

それでは、「StaticArrow(何かに突き刺さった用の矢)」を作成しましょう。

 

「StaticArrow」

f:id:Free_Gamer:20190403002312p:plain

f:id:Free_Gamer:20190403010251p:plain

コンポーネント

f:id:Free_Gamer:20190403002532p:plain

Scene・・・Arrowの位置を自由に変更できるようにする為に親として置いているだけ

Arrow・・・何かに突き刺さった用の矢。飛ばす用の矢「Arrow」と同じメッシュを使用

 

ちなみに、飛ばす矢である「Arrow」の位置と突き刺さった時用の矢「StaticArrow」の位置は、同じにしましょう。

 

例えば、「Arrow」の位置が「X:-50」なら

「StaticArrow」の位置も「X:-50」にする。

 

↓Arrowのコリジョン設定

f:id:Free_Gamer:20190403003141p:plain

 

あとは、作成した矢「Arrow」を飛ばすだけです。

 

~実際に矢を飛ばそう!~

ファーストパーソンテンプレートにデフォルトで備わってる以下のBPを開きましょう。↓

f:id:Free_Gamer:20190403004154p:plain

イベントグラフ

f:id:Free_Gamer:20190403004313p:plain

↓Arrowをスポーンさせます

f:id:Free_Gamer:20190403004341p:plain

 

これで完了です。

あとは、Projectileの発射速度をいじって、色々遊んでみてください^^

 

それではまた!^^ノシ

 

SpawnDecalAtLocationで、デカールがスポーンされなかった時の話。そしてその原因

つい最近、暇つぶしに自己満足人殺しゲーを作ってた時にあった話です。

まだSpawnDecalAtLocationを使ったことないような人は、多分つまづきそうなポイントなので書きますね。

 

人殺しゲーと言うぐらいですから、当然血はつきものです。

なので人を殺した時に、殺された人の場所に血のデカールをスポーンさせようとしました。

こんな感じで↓

f:id:Free_Gamer:20190327071931p:plain

 

デカールをスポーンさせたいとき、「SpawnDecalAtLocation」を使いますよね。

f:id:Free_Gamer:20190327072040p:plain

 

なので、このような処理で血のデカールをスポーンさせようとしました。↓

f:id:Free_Gamer:20190327072853p:plain

SpawnDecalAtLocationのSpawnSizeの「XYZ」はすべて「1」にしました。

デフォルトサイズで表示させたかったので。

f:id:Free_Gamer:20190327072919p:plain

 

これでやってみると・・・

f:id:Free_Gamer:20190327073215p:plain

はい。スポーンされません。

 

Before

f:id:Free_Gamer:20190327071931p:plain

After

f:id:Free_Gamer:20190327073215p:plain

一目瞭然ですよね。

 

原因は何かというと・・・

このDecalSizeの値です!↓

f:id:Free_Gamer:20190327072919p:plain

 

僕は、「拡大・縮小」の部分の数値を入れればいいと思い、「XYZ」すべてを「1」にしました。

f:id:Free_Gamer:20190327073552p:plain

 

ですが、本当に入れるべき値は・・・

f:id:Free_Gamer:20190327073824p:plain

DecalSizeの部分の値なのです。

 

Decalのデフォルトサイズは
「X:128」「Y:256」「Z:256」です。

 

なので、この値を入れてやれば・・・↓

f:id:Free_Gamer:20190327074053p:plain

 

はい!望んでた通り、デフォルトサイズでデカールが表示されます!↓

f:id:Free_Gamer:20190327071931p:plain

 

最初は、表示されないのがバグだと思ってましたが、そんなことはなかったですww

これからSpawnDecalAtLocationを使ってみようかなーと思ってる方はぜひご一読を!

 

それではまた!^^ノシ