先週のTokyoMeetUpにお越しくださった方々そして配信を見てくださった方々ありがとうございました。
先日のTokyoMeetUpで実装した機能の一つを。(プロジェクトを配布と思ったのですが、いろいろとあって記事にします。)
作成したのもはフックショットになります。
簡単にではありますが、実装方法について書きたいと思います。
仕様
1.クリックするとLineTraceでHitした場所へ飛ぶ(フックショット)
2.フックショットの作動中にジャンプをする
3.地面にフックショットを当てた時は自動的にフックショットの動作を停止する
使用するテンプレート
FirstPersonTemplate
実装
1.クリックするとLineTraceでHitした場所へ飛ぶ(フックショット)
まずFirstPersonCharacterのブループリントを開きます。
InputActionFireのノードを切り以下のようにノードを組みます。
このノード構成はTraceLineのノード構成で画面の中心から3000かけた部分へLineTraceを飛ばすようになっています。
次にBoolean型の変数を作成します。今回は”Hit Object?”という名前にしました。
そしてHitOutからBreakHitResultを出しVector変数を作成しLocationとつなぎます。
これでObjectにヒットした時にBoolean型の変数の”HitObject?”がTrueになります。
次にPlayerを移動させるブループリントを作成します。
EventTickから先ほどのHitObject?でBrunchを行います。
そしてPlayerを動かすノード構成は以下のとおりです。(LaunchCharacterのOverrideは2つともチェックを付けてください)Event Tickにつながっている掛け算のノードに数値が200という数値が入っていますが、この数値をイジることで移動速度が変わります。
これでヒットした所へ移動するようになりました。
2.フックショットが作動中にジャンプをする
フックショット中はCharacterがFalling(落下判定)の状態になっているためJumpが反応しません。なので別にノードを組む必要があります。
Jumpの代わりにLaunchCharacterを使用します。”HitObject?”でBrunchを行いTrueになった場合にLaunchCharacterへノードが映るようにします。この際にLaunchVelicityはZのみ700にしてください。(数値はJumpの高さなのでおこのみで
LaunchCharacterでJumpをしたらフックショットを停止しないと行けないので画像のように”HitObject?”をFalseにしました。
3.地面にあたった時に自動的にフックショットを停止する
この動画を見てください
地面にフックショットを打ったら自動的に機能が停止し何もしなくても歩けるようにする必要があります。
その際に使うのがBreakHitResultのNormalです。
これで地面を撃ってみると以下の様な結果になります。
X=0,Y=0,Z=1という情報がPrintstringに出るので以下のようにノードを組みます。
NomalでBreakしZが1になったら場合をBrunchで分けBoolean型の変数を作成しTrueの時にチェックを入れFalseの時は作成した変数もFalseにします。変数名は”NormalZ?"にしました。
”HitLocation”と自分のロケーションを引きVectorLengthで長さとしてFloat型に変換しそれが200以下になった場合(HitLocationとActorのLocationの差が200以下になった場合)と先ほど作成した”NormalZ”とAndでつなぎBrunchします。そしてTrueだった場合”HitObject?”にFalseを入れます。
これで完成です。
ぜひ遊んでみてください〜!では!