サードパーソン視点のパズルゲームを作りながらUE5の操作を学習するのが目的。
前回はほぼUE5の導入のみだったので実質は今回がスタート。
では行ってみましょう。
使用しているバージョン
Unreal Engine 5.3.2
プロジェクトの起動
起動して最初に見えるこの画面をビューポートと言います。
ビューポート画面での基本操作
右クリック+マウス | 定点からの見渡し |
右クリック+WASD | 視点移動(上下左右 平行移動) |
左クリック+マウス移動 | 前後移動+左右見渡し |
マウスホイール | 拡大縮小 |
(アクタ選択後)スペース | XYZ平行移動/XYX回転移動/XYZ拡大縮小を順番に変更 |
(アクタ選択後)ALT+XYZ平行移動 | アクタの複製 |
CTL押しながらアクター選択 | アクタを複数同時選択 |
CTL+Z | 1つ前の操作をキャンセル |
ALT+P | 動作テスト画面へ移行 |
(動作テスト画面で)ESC | ビューポート画面に戻る |
F10 | サイドのパネルをトグルに変更 画面が広く使え、必要に応じてパネルを出せる |
プレイヤーの動きのパラメータ設定
※イベントグラフ(ノードプログラム)画面は初お目見えなので軽く説明だけ
今回の設定では初心者向けに基本的な設定は行ってくれているようで。
WASD移動やスペースでジャンプが行えますが、それはどこで設定されているのかというと
コンテンツドロワー の下のコンテンツ > ThirdPerson > Blueprintsにある「BP_ThirdPersonCharacter」にあります。
FPSの場合も多少名前は違いますが、おそらく似た感じの場所にあると思います。
ダブルクリックしてみると
なにやらノードの連なりが見えます。
これが「イベントグラフ」で、アクタ(今回はBP_ThirdPersonCharacter)に関係するノードプログラムが記述されている場所。
・上部ウィンドウタブの「マイブループリント」にチェックマークが入ってることを確認
・「マイブループリント」ウィンドウのEventGraphをダブルクリック
他にも詳細パネル等やビューポート等、閉じてしまったウィンドウを再び開く場合はウィンドウタブを確認しましょう。
また、マイブループリントのウィンドウは他にもConstruction Scriptや自作の関数などのノード画面に行く際にも使います。
赤ノード:開始時のノード(上画面はたまたまEvent Begin Playだがそれ以外でも)
赤以外のノード:関数や変数の設定など、処理によって分類分けされている
白ワイヤー:実行ワイヤー。ノードの実行順序を示す。
白以外のワイヤー:データワイヤー。ノードに対してサポートを行う。
ワイヤーの切断と接続
・スタートピン/エンドピンどちらかで右クリックから「ノードリンクを切断」
・ワイヤー上でALT+クリック
・ワイヤー上でCTL+クリック(代わりのノードを設置)
TriggeredからドラッグしながらJumpの矢印(ピン)まで線を引くと
ノードリンクが復活
ジャンプキーがトリガーされるとジャンプすることは分かりましたが、その高さはどこで設定されているのでしょうか。
動作パラメータの設定
BP_ThirdPersonCharacterを開くと右に表示される詳細パネルで行います。
もし「詳細パネル」が表示されていない場合は上部の「ウィンドウ」タブの「詳細」にチェックマーク。
コンポーネントで選択することで、選択したコンポーネントの詳細パネルが開きます。
設定項目がかなり多いので見つけるのが大変ですが、(設定ワードが分かっていれば)jumpやspeed等、関連するワードで検索すると時間短縮になります。
試しにジャンプ力を700(デフォルト)と1400で比較
700⇒1400cm/sに変更
変更前
変更後
ジャンプ力を上げることができました。
テストプレイでは移動制約が緩い方がスムーズに確認できるので、少しだけ調整して進めます。
Actor(アクタ)とMaterial(マテリアル)
Actor(アクタ)は分かりやすく言うとオブジェクト/設置物のこと。
Materialはアクタの見た目などの装飾(表面に張り付けるイメージ)。
Actorの配置
「ウィンドウ」⇒「アクタを配置」
「形状」タブでキューブ型を画面にD&D
3本の矢印をドラッグしながら動かすとX座標/Y座標/X座標を視覚的に移動できる。
右のトランスフォームの「位置」に数値をうち込んでも可能。
回転/拡大に関しても同じように数値を打ち込んで編集可能。
スペースキーを押すと「位置」 >「回転」 > 「拡大」 > 「位置」と設定種類が順に変更。
これだけできちんと当たり判定のあるブロックを設置できる。
コンテンツドロワー ⇒ StarterContent ⇒ Shapesフォルダ にも色々な形のActorが入っていて、これをD&Dで置くこともできる。
また、出したオブジェクトはデフォルトだと空中に浮かんでいて押すこともできないので、物理判定を行いたい場合はアクタ選択後の詳細パネルで設定します。
物理タブのSimulate Physicsにチェックを入れると、重力の影響を受けたりプレイヤーキャラで押したりできるように。
他によく使う動作としては、ALTキーを押しながらアクタを移動/アクタ選択後にCLT+Dのどちらかでアクタを複製
マテリアル(アクタの見た目)の設定
マテリアルの作成
コンテンツドロワー⇒ StarterContent ⇒ Materialsでベースにしたいマテリアルを選択してからCTL+D(複製)
便宜上球形なだけで、あくまでアクタに貼り付ける材質が示されています。
好きなワークスペースで右クリックメニューからマテルアルを作成してもよいですが、既存の物をいじる方が最初はやりやすいと思います。
複製したマテリアルをダブルクリックするとマテリアルグラフ(内部設定画面)が開く
colorノードを選択後、左下の項目のDefault Valueから色を変更してみます。
作成したボールをビューポートにD&Dするとmaterialを張り付けることができる。
もう一つのマテリアル変更の方法
アクタを選択後に右側の詳細パネルのマテリアルからの変更も可能
アクタを選択後、右画面のマテリアル⇒エレメントの右側に現在のエレメントが表示されている(BasicShapeMaterial)ところをクリックしてプルダウンメニューで変更
先ほど作成したマテリアルがあるので選択
登録してるマテリアル数が多いとプルダウンメニューで目的のマテリアルを選択する時に手間がかかるので、最終的には使わないマテリアルは消去する方がいいかもしれませんね。
もしかしたら簡単に管理できるプラグインがあるかもしれませんが。
透過性のあるマテリアルの作り方(オマケ)
作り方を覚えておくと便利な場面がありそうなので。
①コンテンツドロワの適当なところで右クリックから新規アセットを作成(マテリアル)
作成が終わったら名前変更(任意)後にダブルクリックで中へ
②詳細パネルのBlend ModeをTranslucentに変更(デフォルトはOpaque)
③イベントグラフの空いてるところに右クリックメニューから
Vector Parameter(上)
Scalar Parameter(下)
の2つのパラメータを設置
それぞれベースカラーとオパシティにつなげる。
Vector Parameterではデフォルトの色を変更可能。
Scalar Parameterでは透過度を設定可能。
透過度は0~1で変化し、0だと透明/1だと透過なし
透過性のあるブロックを配置することで、いわゆる「世界の果て」を作ったり、当たり判定をなくしてcollisionイベントを発生することでダメージゾーンを実装したりできそう。
初心者の私としては、まだ室内ライトの使い方が分かってないので密閉空間に明るさを確保するために使っています。
ブループリントで床ブロックを作成して動かす
ブループリントは上で出てきたアクタ/マテリアル等を組み合わせたゲーム中に使うイベント+要素の組み合わせ設計図という感じでしょうか。
アクタ:特性(形、大きさ、重さ)などを設定
マテリアル:材質を設定
ブループリント:アクタ/マテリアル/プログラムを組み合わせた設計図
今回は2つの方法で動く床を作っていきます。
動く床の作成 パターン① タイムラインで制御する方法
ブループリント(床)の設置
管理しやすいような名前のフォルダを作っておきましょう(今回はMyBlueprintフォルダを作成)。
コンテンツドロワーの上の方の「+追加」⇒「ブループリントクラス」⇒「Actor」
ブロックを連ねて足場にする予定なので名前はstepfoorとしました。
出来たら、D&Dでビューポートに配置してみます。
空なので当たり前ですがゲームを開始してもなにも存在はしてない状態。
ダブルクリックで中身を確認してみるとこのような画面(グラフエディタ)になります。
グラフエディタ上に表示されている情報はそれぞれの×マークで消したりもできますが、表示したい情報がない場合は「ウィンドウ」タブでチェックマークを付けましょう。
今回は「コンポーネント」にチェックが入ってることを確認して下さい。
コンポーネントで今回は足場となるキューブを追加。
この時点で、テストプレイするとキューブが表示されるようになります。
コンポーネント(cube)になったので、最初に作ったshapesのcubeと同じく、マテリアルの設定もできます。
拡大のパラメータを(1,1,1)から(2,4,2)にすると、きちんと反映されているのが分かります。
確認できたら戻します。
ブループリントにイベントを設定①
いよいよ、作った床ブロックにイベントを作っていきます。
まずは中央上のイベントグラフタブを選択。
イベントグラフタブが見当たらない場合
・ウィンドウタブでマイブループリントにチェックマーク
・グラフ>EventGraph(画面左下)をダブルクリック※左下ではない場合も
イベントグラフタブは最初こんな感じ
・Event BeginPlay
ゲームのプレイが始まった時のイベント
・Event ActorBeginOverlap
このアクタが別のアクタとオーバーラップする時のイベント。
・Event Tick
(Tickが有効な場合)フレーム毎に呼び出されるイベント。
※説明はUE内のものそのままなので、理解できたら書き直すかも…
ブループリントにイベントを設定② タイムライン
Event BeginPlayの右あたりの何もないところで右クリックから、ノードを作成。
作成するノードは「Add Timeline」
名前は適当にmovingfloorにしておきます。
新しく作ったノードをダブルクリックでさらに中身を設定します。
今回使うのは「フロートトラック」。
1個目:0から始まり、2.5秒後に256になり、5秒後に0に戻る(ループ処理)。
2個目:256から始まり、2.5秒後に0になり、5秒後に256に戻る(ループ処理)。
マークをクリックした後に、数値を直打ちすると正確に設定できます。
1つのタイムラインノードで複数のトラックも定義可能なので、今回は2つ設定しました。
2つ目は最後に使います。
ブループリントにイベントを設定③ ロケーション変化の設定
②のタイムラインでは、何かが0から256まで変化するというタイムライン処理だったので、ここで対象を設定。
今回はtransfomationノードの「Set Relative Rocation」を使用。
ノードの設置は同じように空いてる場所で右クリックから探します。
Cube_floor1は上で作成したcubeの名前を分かりやすく変えたもの(変更してない場合はcubeになっています)。
このままだとLocationの変動がX/Y/Z全部に影響してしまうので、New Locationのところで右クリックメニューから「構造体ピンを分割」
ブループリントにイベントを設定④ イベントを繋いで完了
Event BeginPlay:ゲーム初期から動き出すイベント(トリガー)
movingfloor(タイムライン):5秒周期で0⇔256の変化を設定
Set Relative Location:タイムラインの変動をZ軸の変化に連結(Cube Floor1へ)
つなぎ方はこんな感じ。
Set Relative Locationは相対的な座標変化なので、トラックループ時にきちんと初期値まで戻ってないと段々とズレていく可能性がありますので注意。
絶対座標指定のSet World Locationを使うことで、絶対座標指定にもできますが用途はかなり限定されそう。
一応これで動作してみて、上下運動してくれるか見てください。
ブループリントにイベントを設定⑤ 複数のアクタを設置してみる
先ほど作ったアクタをALTキーを押しながら移動することで複製できるので、複製してみます。
さらに動きにバリエーションを持たせるために作ったブループリントを複製。
今度は、先ほど使わなかった2番目のトラックに繋ぎます。
ブロックの色(material)とタイムラインのトラックだけ変えて量産。
動かしてみると
相対座標で同時に動かすことでギミックっぽい動きが作れそうです。
動く床の作成 パターン② InterpToMovement(コンポーネント)を利用する方法
こちらは私は後から知った方法でこちらの方が簡単に作成できますが、パターン①で覚えたタイムラインを使った方法も覚えておいて損はないと思うので別パターンとして記載しました。
決して自分が苦労したものを皆さんにも、とかそんなことはあまり思ってません。
ブループリントの作成
ここは復習になります。
作業フォルダで右クリック
ブループリントクラスを指定
親クラスはActor
名前はMovingfloorにしておきます。
コンポーネント(cube/InterpToMovement)の設定
出来たブループリントをダブルクリックして中身を見ていきます。
左上「コンポーネント」のすぐ下の「+追加」から、「キューブ」を選択して追加。
コンポーネントが出てない場合は画面上の「ウィンドウ」でチェックが入ってるかを確認して下さい。
同じように左上「コンポーネント」のすぐ下の「+追加」から、InterpToMovementを追加します。
コンポーネント2種の内部設定
cubeの設定例
見た目だけなので基本的には自由に。
拡大縮小とマテリアルだけ変えました。
InterpToMovementの設定例
アクタの動きを制御します
制御>Control Pointsの右の+からエレメントを追加。
duration(間隔)に関しては床の速度を変えたい場合はいじってみましょう。
今回は2点間の往復なのでインデックスを2つ。
上のようにインデックスの値を変更すると、Z軸に対して0~256の往復移動になります。
Behaviour Typeに関しても、初期ではone shot(目的地で停止)になっているのでping pong(往復)に変更。
ここまで終わったら、左上のコンパイルを押します。
ビューポート画面に先ほどのブループリントを配置していきます。
テストしてみると
イベントグラフに触らずにできるということは、コーディングが見やすいということでもあるので、こちらの方がスマートですね@@;
今回はこの辺りで。
コメント