はじめに
大人気の8番出口ライクなまちがいさがし・脱出ゲームの作り方をUnrealEngine歴2か月の初心者な私から、これから自分でゲーム開発はじめてみたい方、始めたけど何から手を付けていいかわからない超初心者に向けて詳しく解説していきます。
この解説のまちがいに気づいても引き返さないで最後まで見て脱出してください。
シリーズ記事もご覧ください。
本記事のゴール
8番出口の主要な要素は異変を探す「まちがいさがし」と「無限ループ」でしょう。初回の記事で作成しましたが、画面がちらつく問題が残っていました。この問題を解決する方法を調査したので共有します。
本記事を最後まで読むと、
特定の地点まで進むと知らぬ間にスタート地点に戻っている仕組みで、進んでも戻っても抜け出せない無限回廊にプレイヤーを閉じ込めるゲームの基礎部品「ワープ装置」が完成します。
下記、YouTube動画で段階的に作り方紹介しているワープ部分の未解決課題を解決した記事です。
解決方法を説明した動画は下記ですが、わからないというご意見を頂いているので撮り直し予定ですm(_ _)m
撮り直しついでにもっと色々考慮点を説明しレベルアップしました。
おさらい ワープ装置レベル4 入り口から入り口にワープ
2つのBoxコリジョンを置いて、どちらに接触してもBackに瞬間移動する仕組み「ワープ装置」を作りました。
今いる位置のまま反転させるだけでは不十分で、移動したことに気づかないように回転させるには、コリジョンの反対側に移動させつつ反転させる必要があります。
ワープ中の無限ループ対策と位置計算は下記のようになりました。
追加で、反転時に移動速度が失われないように速度(ベロシティー)情報をXY軸だけ反転させる処理と、カメラ(コントローラ)を回す処理を追加していました。
ワープ装置レベル5 レベル4の問題点とその解決
- カメラがチラつく
- 3人称モード時も同じ装置を使う場合自キャラが後ろ向いた状態でワープする
カメラがちらつく
スロー再生で確認したところ、引き返してワープ装置に反転させられた場合に、1フレーム分くらいカメラ回転が遅れた絵が描画されていることがわかりました。
これはカメラの描画とキャラクターの描画更新が同期できていないせい だと勘違いして、タイミングを合わせる方法を長時間調査していましたが、有効な情報を見つけられずに苦戦していました。
実は原因はタイミングの問題ではなく、設定値との相性問題のようでした。
コントローラへのインプット情報として180度回してという依頼を出すのではなく、
直接コントローラの現在の回転の値を取得して、ヨー方向(地面に水平)に180度足す(引くでもOK)ことでうまく回転させられることを確認できました。
3人称モード時で自キャラが同じ向きのまま
カメラを回すだけでは、前回の記事でカメラを1人称と3人称切り替えられるようにした場合、3人称視点の場合に、自キャラが後ろを向いた状態になってしまいます。
ということで、自キャラも回す必要がありますね。
※初回の記事を書き直すついでに、自キャラの回転はレベル4で対応済にしてあります
動画では2本の間で裏でやってしまっている部分ですm(_ _)m
解決法
自キャラを移動させつつ回転も同時にさせるノードSet Actor Location And RotationがあるのでSet Actor Locationをこれに変更しつつ
Get Actor Rotationで取得したワープ前の自キャラの回転に、ヨー方向180度足すことで、
位置を斜め向かいに移動させつつ、後ろを振り向かせます。
また自キャラのコントローラーからワープ前の回転情報を変数に保存しておいて、それに同じくヨー方向180度回した角度にコントローラーを回転させています。こっちが3人称視点でも1人称視点でもカメラの回転に相当。
最終系全体図はこんな感じです。ちょっと複雑になってきました(^▽^;)
ネットを漁っても見つけられず、自分で試行錯誤の結果たどりついた形なので、もう少し簡略化できるかもしれません。気づいたら記事を更新するかもしれません。
原因
理由や経緯を知りたい方に向けて説明します。
BP_ThirdPersonCharacterのCharacterMovementComponent(動きに関するデータ)でRotation Rate(1秒間?に回転可能な角度設定というもの)があり、
ここがサードパーソンテンプレートでは初期値500となっているため、
横に移動させようとすると、コンマ何秒かかけてくるっと回転する様子が描写される演出になっているのですが、
これが影響してか、
Add Controller Yaw Inputでマウス等からの入力と同じように180度瞬間的に回してと依頼を出しても無理ってあきらめちゃっているようです。(実験結果なので、ほかの設定がさらに影響している可能性はあります)
ここの500を-1に変えると横向きの入力を加えると一瞬で横を向く(超絶キビキビ動く人)状態になるのですが、その状態だとワープ時にもちゃんと回転してくれました。
でも、この数値をワープ前に-1にしてワープ後に戻すという処理を入れるよりも、コントローラ自体の回転を直接変更するほうが直感的に思えたため、作戦を変更しました。
おわりに
ようやく理想的なワープ装置が完成し、ワープしたことに気づけない状態にできました。
ご参考になれば幸いです。
ほかにも、看板の表示更新方法やおじさんやタイルマンを動かす方法など、8番ライクゲーム完成に必要な技術のほとんどは解説していますので、よければほかの記事もご覧ください。
コメント