【UE4】第13回ぷちコンで賞を頂いた話
記事にするのがかなり遅れましたが、第13回UE4ぷちコンで【けーちん賞】を頂きました。
ありがとうございます!
受賞者発表の放送は見ていたのですが、どの作品もゲーム性だけでなくビジュアルも凝っていた素晴らしい作品ばかりだったので、まさか自分の「飛んできたトンカツを斬る」という狂ったデザインの作品が受賞できるとは思わなかったです。
ビックリしました。
とはいえ、自分が考え抜いたVRとしての手触りや意図して作った純粋なゲームデザインの部分を褒めて頂いたので、とても嬉しいです。改めてありがとうございます。
作成した作品はitch.ioなどでフリー配信しようと思ったのですが、ブラッシュアップをしたところビルド後のパッケージ状態で不具合が発生してしまったので、しばらくリリースを見送っている状態です。
今月くらいにはリリース出来たらいいなぁ。
【UE4】VRで物体を切断する処理【メモ】
ぷちコンでも使用した処理。個人用の備忘録として残しておく。
VRじゃない環境でのスライスのチュートリアルが沢山あったので助かった。
先駆者に感謝。
1.斬れるオブジェクトを作成
ActorでBPを作成。
プロシージャルメッシュコンポーネントを追加し、スタティックメッシュをアタッチ。
プロシージャルメッシュ内、Use Complex as Simple Collisionのチェックは外しておく。
スタティックメッシュには斬りたいメッシュを割り当てる。
非表示にしたいのでHidden in Gameにチェックする。
イベントグラフを編集する。
プロシージャルメッシュにスタティックメッシュのコピーを作成するノードらしい。
2.ブレードを作成
BP_MotionControllerのHandMeshに「Plane」のスケルタルメッシュコンポーネントをアタッチする。
どうもPlaneじゃないとダメっぽい?
他の形状にしたい場合は、そのアセットにPlaneをアタッチしてPlaneをHidden in Gameをする。
コリジョンプリセットはOverlapAllに。
イベントからOnComponentBebinOverlapとOnComponentEndOverlapを追加する。
緑色のプラスマークをクリックすればOK。
3.イベントグラフの編集
先ほど追加したイベントに以下のようにノードを繋ぐ。
プロシージャルメッシュをキャストして、SliceProceduralMeshで切断面のマテリアルを設定していく。
画像では切ったメッシュを変数に入れているが、これは必須ではない。
物理を有効化し、放射状の衝撃を与える。
4.実行
斬れる!
オブジェクト自体に重力を持たせたい場合は、プロシージャルメッシュとスタティックメッシュのSimulatePhysicsをTrueに。
【UE4】VRで立体起動装置を作った話
前の記事で2年ぶりに記事を更新しました。(過去記事は整理済み)
久しぶりに記事編集画面を覗いてみると、下書き段階で止めてた記事が沢山あってビビる。
せっかくなので、少しずつ放出していこうと思います。
『進撃の巨人』の話
アニメ版の『進撃の巨人』がスゲー面白かった。
戦闘シーンがアニメ映えするのは想像の範疇だったのですが、演出やアニメオリジナルで肉付けされた要素もしっかり面白い。
漫画のコマをそのまま映像化したような作品も多い中で、アニメならではの間の取り方とか怪し気なライトのトーンとか、雰囲気作りが絶妙に上手いなと思いました。
人間が巨人化する時の落雷演出もアニメが初出で逆輸入された物なんですね。すごい。
というワケで
立体起動装置で街中をビュンビュン飛んでるキャラクターを見てると、「具合悪くなりそう」より「楽しそう」の気持ちの方が勝るんですよ。
でも、意外とこういうワイヤー移動のVRゲームってリリースされていない。
露骨に酔うゲームはストアの審査段階で弾かれるので……。
さすがトルフィン。
というワケで、思いつきでVR立体起動装置を作ってみました。
1年前くらいに作ったVR立体起動装置をちょっとカスタマイズしてた。ケーブルの刺さった距離によってプレイヤーのスピードが変わる原因が未だに分からないから調べてる…。 #UE4 #VR #進撃の巨人 pic.twitter.com/paPVycXlsN
— kanio (@kanikanio) 2020年4月2日
ツイートに書いてある通り、スピードが思い通りにいかないのでこれは課題。多分組み方が悪い。
巨人もスケルタルメッシュをスライスしてるのではなく、アタッチした頭のスタティックメッシュを斬っているので割とでっち上げ。
ともあれ、作ったついでに記録を残します。
クソザコ初心者なので、間違いは指摘してもらえたら助かります。
立体起動装置レシピ(ワイヤー射出装置編)
1.セッティング
まず、自機となるBPにワイヤーを設定します。
立体起動装置のワイヤーは手ではなく腰にあるので、「BP_MotionController」ではなく「MotionControllerPawn」の方に作りましょう。
身体に重力を持たせたいので、親クラスをPawnからCharactorにします。
親クラスはツールバーの「クラス設定を編集」から変更できます。
Cableコンポーネントを追加し、Cameraにアタッチさせます。
今回は、「プレイヤーが見ている画面中心にケーブルが射出される仕組み」にしましょう。
座標は好みで腰のあたりに調整してください。
ケーブルの詳細を設定します。
Cable Length : 静止したケーブルの長さ。
格納時はケーブルが出てないようにしたいので、0を設定します。
Num Segments : セグメントの数。値が大きいほどフニャフニャになります。
今回作るケーブルは発射後すぐ直線になるので、値はそこまで大きくしません。
Solver Iterations : 剛性(ってなんだ?)。値が大きいほど歪みにくくなるとかそんな感じだろうか。
今回は歪みを持たせる想定ではないので、こちらも低めに設定してます。
Cable Width : ケーブルの幅。細くしたいので小さめでOK。
2.ワイヤー発射のボタンを決める
プロジェクト設定でinput設定をします。
今回は、OcullusTouchのXボタンで左、Aボタンで右側から射出されるようにしたいので、以下のように設定します。
※昔のverだとOculusTouchのボタン名称が違います。
Xボタン→MotionController(L)FaceButton1
Aボタン→MotionController(R)FaceButton1
※デフォルトだと「TeleportRight」と「TeleportLeft」に同じキーがアサインされているので、変えるなり消すなりしてください。
3.変数を作る
変数を用意しましょう。
今回使うのはこの3つです。
Hooked | Bool | FALSE | ケーブルを出してるか否か |
HookedLocation | Vector | 0,0,0 | ケーブルが刺さった座標 |
HookMovedFinished | Bool | FALSE | ケーブルが射出(移動)し終えたか否か |
4.イベントグラフを編集
イベントグラフに移行して、処理を書いていきます。
まず、EventBeginPlayとSequenceの間に処理を追加してあげます。
ケーブルを表示して、収納時の長さと終点座標をセットする処理ですね。
次に、Hookのinput処理を書いていきます。
全体像はこちら。
inputされたら、LineTraceForObjectsが走ります。
※MakeArrayで設定した項目は公式ドキュメントを参照。
LineTraceの開始地点はカメラ位置、終了地点は自分が向いてる方向と指定した距離ですね。乗算してるFloatにワイヤーの射出可能な距離を好みで入れます。
自分で試した感じだと、1万では全然長さが足りなかったので10万(1km)を入れています。
値が返ってきた場合、Hookedの変数をTrueにし、HookLocationにレイがHitした位置座標をSetします。
値が返ってこなかった場合は、StopGrappleの処理に移行するのですが、これは後の手順で作成するので今は設定しなくて大丈夫です。(Releasedのも同様)
4.関数を作る
今回作る関数は2つ。
ケーブル自身が移動する処理と、自機の移動処理です。
▼MoveGrappnel
ケーブル自身が移動する際の関数です。
ケーブルの刺す先が1m以下の場合、Trueの値を返し即座に関数の実行を終了するのですが、
1mより遠かった場合、線形補完を用いてケーブルが移動してくれます。
小なりイコールで設定してる数値は好みに応じて自由に変えてみてください。
線形補完した際の1fあたりの移動量はVInterp ToノードのInterpSpeedで変更できます。
▼MovePlayer
自機移動の関数です。
単純に、LaunchCharacterノードを使ってケーブルを刺した地点まで自機を飛ばします。
乗算しているFlort値がそのままスピードになるので、これも好みで調節。
5.Tickに処理を追加
※VRテンプレートだと元々Tickにはテレポートに使う処理が入っているのですが、今回は不要なので消しています。
先ほど作成した関数をTickに入れていきます。
ここでようやくHookMoveFinishedの変数を使います。
Falseの間は、MoveGrappnelの関数を実行します。
ケーブルの移動中は関数の中でFalseが発行され続けるので、HookMoveFinishedもFalseのままになります。移動を終えるとTrueを返してMovePlayerを実行してくれます。
5.Stopの処理を作る
最後に、ケーブル処理をストップするカスタムイベントを作成します。
全てをリセットするだけですね。
手順の図の通りReleasedとBranchに繋いで、プレイインしてみましょう。
楽しいぞ!
ボタンを押してる間はケーブルを射出し、離すとケーブルも離れます。
スライスの処理はCopyProceduralMeshを応用したでっち上げなので今度。
もうちょっとちゃんと作れる気がする…。
【UE4】第13回ぷちコンに参加した話
この度、株式会社ヒストリアさんが主催している第13回UE4ぷちコンに参加してみました。
今回のテーマは「さく」。
SNSのハッシュタグやYouTubeにあげられた動画を見てると、みんな立派な作品を作り上げてて凄い……。
UE4は仕事で使っていますが、BPの設計や各種機能に関しては完全に独学です。
なので、こういう学習の成果を試せる機会を作ってくれるのはとても有難いですね。
見れば見るほど反省点が多い…。
特にゲームの開始終了周りのシーケンスは酷いとしか言いようがないですね。
まぁダメな所だけ振り返っても不毛なので、この辺は次に生かそう…。
動画だと伝わらないですが、トンカツを斬るときのフィードバック感は結構気持ちいい感じになったので満足。
肉を投げた時の物理挙動は理解が及ばなかったので今後の課題。
ともあれ、前からやってみたいと思ってたVRで1つ作りきれたのはよかったです。反省含めて楽しかった。
今度は1人じゃなくて、友達連れて複数人で挑戦してみたいですね。
今回、肉やトンカツのマテリアルやモデリング教えてくれたくびのじさん、ありがとう。スペシャルサンクス。
余談
ゲーム中のレベルは『カスタムロボ』の寿司ステージをモチーフにしてみました。
64のゲーム、ポケスタのミニゲームといい寿司が沢山出てきてたイメージ。
余談その2
ぷちコン提出作品にマケプレのアセットを使っていいのか疑問だったのですが、お問い合わせから聞いてみたところ、マケプレ問わずライセンス的に問題ないアセットは使用可能らしいですね。
SEはAudiostockで購入した物を使用しました。