UE4:ジップラインのブループリントの実装について
ジップライン実装したくて作ってみました。
録画ソフトの影響でジップライン作動時にカクつきがあります。
メモリが足りないのかしら・・・
一応iPhoneの方で撮ってみました(カクつきがない!!
— +ぶっさん+ (@Bussan_desu) 2015, 9月 2
ジップラインを実装しよう!
使用したもの:サードパーソンテンプレート
仕様:スタートのトリガーボックスに当たるとジップラインが動き出す。
ゴールのトリガーボックスに当たるとジップラインの停止
ConstructionScriptをいじって設置しやすくする。
ジップラインのブループリント
まずヒストリアさんのこの記事を確認して下さい。
この神記事の"スプラインの編集"までを確認し作成してください。
ActorにSplineを追加し関数を作成したらこのようになっていると思います。
ジップラインということで、スタートとゴールのコリジョンボックスを設置しそこにキャラクターが入った場合ジップラインが動き出すようにします。
画像で言うと以下のように(画像では棒をプロシージャルで表示してます。後々出てきます。)
アクターのコンポーネントにBoxを2つ追加し以下のように名前をつけます。
「StartOverlap」と「EndOverlap」にしました。
これらをどこに設置していくのか。それはスプラインポイントの一個目と最後に設置されるようにします。
これらはConstructionScriptでBluePrintを記述していけば作成が可能です。
ConstructionScriptのブループリントの作成
まずConstructionScriptにシーケンスをつなげます。(画像では2つつながってますが上の方・・・)
コンポーネント欄からSplineを出し、GetNumSplinePointノードを出します。これはスプラインポイントの数を判別するものです。
まずStartoverlapの設置から始めます。同じようにSplineを設置しGetWorldLocationatSplinePointノードを設置します。これは指定したスプラインポイントの位置情報を取得することができます。
StarOverlapを設置しそれをSetWorldLocationにつなげます。NewLocationにはReturnValueをつなげます。
次にEndOverlapの設置をします。まずEndOverlapを設置しSetWorldTransformに接続します。なぜTransformなのかはスプラインポイントのRotation情報を取得しEndOverlapに適応させるためです。
ではTransformを作っていきます。MakeTransformを出しておきます。
SplineからGet Distance Along Spline at Spline Pointノードを出します。PointIndexにはGetNumSplinePointsから1を引いた数を入れます。(作成時、数値が合わないことに気付かずに時間を無駄に使ってしまいました・・)
次にSplineからGetWorldLocation at Spline PointとGetWorldRotation at Distance Along Aplineを出します。一つ目が位置情報、2つ目が回転の情報になります。そしてLocationの方のPointIndexに先ほどと同じように一引いたものを接続します。
それらをMakeTransformに接続していきます。Scaleは自由に数値を入れるか画像のようにEndOverlapのScaleを取得して入れるといいと思います。
全体のノードはこのようになっています。
棒のプロシージャルのノード構成はこちらになります。シーケンスの2つ目につなげてください。
MeshによってForwardAxisを変えたほうがいいと思います。
次はキャラクターがStartOverlapに入った時にジップラインが稼働する、EndOverlapに入った時にジップラインが停止するようにします。
イベントグラフのブループリントの作成
イベントグラフに戻り各Overlapイベントノードを設置し、設定しているキャラクターにキャストします。Gateノードを使いTickと組み合わせます。
Exitには以下のようにノードを設置します。
これはヒストリアさんの記事にある足場の作成とほぼ同じノード構成になっています。
違う部分と言ったら以下のところだけです。
これでだいたいいいのですが、このままだと一回ジップラインに乗ってしまうと次StartOverlapに入った時にEndOverlapまで瞬間移動してしまうので、EndOverlapに入ったらMoveDistanceを0にする必要があります。
これで動くと思います。
追記:Speedの変数の数値は500になっています。変数に数値入れ忘れると動きません。
ジップラインのスピードもこのBluePrint内で設定ができるのでスプラインポイントにボックスを設置するようBluePrintを組んでキャラクターがボックスに入るとスピードが変わったりするとまた面白いかもしれませんね。
今回のノードの全体像
ConstructionScript
イベントグラフ
追記:違うものを作った時のノードが混じってるので後々画像を変えます
以上