僕の私のUnrealな日々

UE4のBluePrintを使って小さなギミックを作ったりしてます。ブログを通じて情報共有ができたらなと思います。

UE4:ジップラインのブループリントの実装について

 

f:id:Bussan_dayo:20150902165904p:plain

 

ジップライン実装したくて作ってみました。

 

 

 録画ソフトの影響でジップライン作動時にカクつきがあります。

メモリが足りないのかしら・・・

 

一応iPhoneの方で撮ってみました(カクつきがない!!

 

 

ジップラインを実装しよう!

使用したもの:サードパーソンテンプレート

仕様:スタートのトリガーボックスに当たるとジップラインが動き出す。

  ゴールのトリガーボックスに当たるとジップラインの停止

  ConstructionScriptをいじって設置しやすくする。

 

ジップラインのブループリント

まずヒストリアさんのこの記事を確認して下さい。

historia.co.jp

 

この神記事の"スプラインの編集"までを確認し作成してください。

 

f:id:Bussan_dayo:20150902161049p:plain

 

ActorにSplineを追加し関数を作成したらこのようになっていると思います。

f:id:Bussan_dayo:20150902161129p:plain

 

ジップラインということで、スタートとゴールのコリジョンボックスを設置しそこにキャラクターが入った場合ジップラインが動き出すようにします。

 

画像で言うと以下のように(画像では棒をプロシージャルで表示してます。後々出てきます。)

f:id:Bussan_dayo:20150902161331p:plain

 

 

アクターのコンポーネントにBoxを2つ追加し以下のように名前をつけます。

f:id:Bussan_dayo:20150902161418p:plain

 

「StartOverlap」と「EndOverlap」にしました。

 

これらをどこに設置していくのか。それはスプラインポイントの一個目と最後に設置されるようにします。

f:id:Bussan_dayo:20150902161540p:plain

 

これらはConstructionScriptでBluePrintを記述していけば作成が可能です。

 

ConstructionScriptのブループリントの作成

まずConstructionScriptにシーケンスをつなげます。(画像では2つつながってますが上の方・・・)

f:id:Bussan_dayo:20150902161740p:plain

 

 

コンポーネント欄からSplineを出し、GetNumSplinePointノードを出します。これはスプラインポイントの数を判別するものです。

f:id:Bussan_dayo:20150902161914p:plain

 

まずStartoverlapの設置から始めます。同じようにSplineを設置しGetWorldLocationatSplinePointノードを設置します。これは指定したスプラインポイントの位置情報を取得することができます。

StarOverlapを設置しそれをSetWorldLocationにつなげます。NewLocationにはReturnValueをつなげます。

f:id:Bussan_dayo:20150907035701p:plain

 

次にEndOverlapの設置をします。まずEndOverlapを設置しSetWorldTransformに接続します。なぜTransformなのかはスプラインポイントのRotation情報を取得しEndOverlapに適応させるためです。

 

f:id:Bussan_dayo:20150902162431p:plain

 

 

ではTransformを作っていきます。MakeTransformを出しておきます。

 

SplineからGet Distance Along Spline at Spline Pointノードを出します。PointIndexにはGetNumSplinePointsから1を引いた数を入れます。(作成時、数値が合わないことに気付かずに時間を無駄に使ってしまいました・・)

f:id:Bussan_dayo:20150907035739p:plain

 

 次にSplineからGetWorldLocation at Spline PointとGetWorldRotation at Distance Along Aplineを出します。一つ目が位置情報、2つ目が回転の情報になります。そしてLocationの方のPointIndexに先ほどと同じように一引いたものを接続します。

f:id:Bussan_dayo:20150902163111p:plain

 

 それらをMakeTransformに接続していきます。Scaleは自由に数値を入れるか画像のようにEndOverlapのScaleを取得して入れるといいと思います。

 

全体のノードはこのようになっています。

f:id:Bussan_dayo:20150907035754p:plain

 

 

棒のプロシージャルのノード構成はこちらになります。シーケンスの2つ目につなげてください。

f:id:Bussan_dayo:20150902163441p:plain

 

MeshによってForwardAxisを変えたほうがいいと思います。

f:id:Bussan_dayo:20150902163611p:plain

 

 

次はキャラクターがStartOverlapに入った時にジップラインが稼働する、EndOverlapに入った時にジップラインが停止するようにします。

 

イベントグラフのブループリントの作成

イベントグラフに戻り各Overlapイベントノードを設置し、設定しているキャラクターにキャストします。Gateノードを使いTickと組み合わせます。

f:id:Bussan_dayo:20150902163847p:plain

 

Exitには以下のようにノードを設置します。

f:id:Bussan_dayo:20150902164008p:plain

 

これはヒストリアさんの記事にある足場の作成とほぼ同じノード構成になっています。

 

違う部分と言ったら以下のところだけです。

f:id:Bussan_dayo:20150902164038p:plain

 

これでだいたいいいのですが、このままだと一回ジップラインに乗ってしまうと次StartOverlapに入った時にEndOverlapまで瞬間移動してしまうので、EndOverlapに入ったらMoveDistanceを0にする必要があります。

f:id:Bussan_dayo:20150902164224p:plain

 

これで動くと思います。

追記:Speedの変数の数値は500になっています。変数に数値入れ忘れると動きません。

 

ジップラインのスピードもこのBluePrint内で設定ができるのでスプラインポイントにボックスを設置するようBluePrintを組んでキャラクターがボックスに入るとスピードが変わったりするとまた面白いかもしれませんね。

f:id:Bussan_dayo:20150902164340p:plain

f:id:Bussan_dayo:20150902164718p:plain

 

 

今回のノードの全体像

ConstructionScript

f:id:Bussan_dayo:20150902171034p:plain

 

イベントグラフ

f:id:Bussan_dayo:20150902171049p:plain

追記:違うものを作った時のノードが混じってるので後々画像を変えます

 

 

以上