思考が離散

そこはかとない感ただよっている。いつなくなってもおかしくない。

UE4でとりあえず動く床とか落ちる床とか回る床を実装する

はじめに

とりあえずハンズオン勉強会で習ったことの復習を兼ねた記事です。

シンプルな3Dアクションゲームを想定して作っていこうと思います。

 

UE4のガチ初心者なので、バッドノウハウとかあると思います。 

手順や作業を整理して記事を書いてるわけではないので、拙い点はご容赦を。

 

プロジェクト的には↓を引き継いでますが、たいした事してないので問題ないかと思います。

nmmn.hatenablog.com

 

何をやるのか

タイトル通り、動く床とかUE4で作ってみます。

 

全体観

f:id:NMMN:20160203202340p:plain

画像だとわかりづらいですが、黄色いパネルが動く床、青いパネルが一定時間後に落ちる床、奥の白い床が回転床です。

 

 

動く床をつくる

f:id:NMMN:20160203202628p:plain

動く床はなかなか複雑です。勉強会の時、講師の人と一緒に作業してなかったら実装するのに難儀していたでしょう。

 

f:id:NMMN:20160203202946p:plain

 再生、逆再生に相当するカスタムイベントを作成し、TimeLineノードにつなげます。

f:id:NMMN:20160203203114p:plain

 タイムラインも単純で、1:00のところに1になるように設定しているだけです。

最終キーフレームを使用しますか?」にチェックを入れています。

 

f:id:NMMN:20160203203625p:plain

パネルの移動を再生する部分です。

Lerpという線形補完するノードを使って、動く床の初期位置からEndLocation(終端)までの座標を、SetRelativeLocationで動かしています。MovePanelは動く床本体です。

 

f:id:NMMN:20160203203900p:plain

動く床の動作の再生後は、再生と逆再生を切り替えます。

DeleyノードでStopTime時間分だけ停止させることで、始点、終点に到達した時に床を停止させています。

 

f:id:NMMN:20160203204128p:plain

 勝手にカスタムイベントとか作ったので、初期化処理を入れました。

ゲーム開始時に、再生モードで動く床が再生されます。

「何秒で再生するのか」というのはMoveTimeという変数にして外から編集できるようにしました。デフォルトは1秒です。

 

f:id:NMMN:20160203204443p:plain

f:id:NMMN:20160203204600p:plain

EndLocation変数の設定に、「3Dウィジェットを表示」にチェックを入れました。

こうすることで、編集しやすくなり便利になります。

 

ビューポートにはキューブ以外特に無いので、ビューポートは省略します。

 

乗ったら落ちる床を作る

乗った後、色が変わって、一定時間したら落ちて消える床を作ります。

f:id:NMMN:20160203204756p:plain

落ちる床も少し複雑です。とりあえず乗ったかどうか判定するコリジョンとキューブをいい感じにしてビューポートを編集しましょう。

乗ったかどうか判定するコリジョンにはTriggerと名づけました。

 

f:id:NMMN:20160203205354p:plain

MT_FallPanelというマテリアルを作り、Base_ColorというVector3変数を作ってベースカラーにつなげています。このBase_Colorをあとでいじってあげることで、色を変えようという魂胆です。

 

f:id:NMMN:20160203205122p:plain

「乗った後、色が変わる」部分を実装するために、コンストラクションスクリプトDynamicMaterialInstanceを作成します。

安易にMatInsという名前をつけましたが、本来ならばもっとわかりやすい名前のほうがいいと思います。

SetVectorPrameterValueノードのパラメータ名に、先ほどのBase_Colorを設定します。デフォルトカラーを青に設定しています。

 

f:id:NMMN:20160203205858p:plain

イベントグラフもゴチャゴチャしてますが、コメントの通りのことをしているだけです。

 

f:id:NMMN:20160203213003p:plain

Triggerコリジョンにオーバラップしたのがプレイヤーだった時、SetVectorParameterValueでピンク色に変えます。

 

f:id:NMMN:20160203213122p:plain

Delayノードで一定時間その場にとどまった後、SetSimulatePhysicsで物理シミュレートをオンにします。物理シミュレートをオンにすると勝手に重力の影響を受けて落ちていくので、その後テキトーな時間でDestroyActorノードに通して消えていただくって寸法です。

 

f:id:NMMN:20160203213556p:plain

できました。

 

回る床をつくる

 

f:id:NMMN:20160203214058p:plain

落ちる床と回る床が強かったので身構えてましたが、回る床はそんなでもないです。

コンポーネントRotatingMovementという超便利そうなやつがあるのでコレを追加。

 

f:id:NMMN:20160203214221p:plain

 コンストラクションスクリプトで初期化。

SpinRateを変数化して、あとはレベルエディタ上で速度を編集してやるだけでした。

 

f:id:NMMN:20160203214421p:plain

長方形にして、いい感じのSpinRateにしておしまい!

 

後記

今回は床系ばっかりです。

落ちる床の色を変えるところで悩んだりしましたが、以下のブログで解決しました。

manabibeya.com

 

わかってないこと、疑問点、懸念事項

  • 回る床に乗ってるとき、カメラが一緒に回るのが気に食わない。
  • 回る床の物理挙動にプレイヤーが影響されている感じがする。

上の奴は回転床に載ってる時だけ専用のカメラを作って、スムーズに切り替わる、とかいう機能を作れば解決する気がします。

回る床の物理に影響されてる気がするやつは……どうしましょう。ちょっと対策思いつかないですね……。

 

明日はどうしましょう。アイテムとHPでも実装しましょうか。

僅か二回目にして急ぎ足になったりしましたが、そんなかんじで。

 

では、また。