UE4オンラインラーニング
ブループリントによるツインスティック シューター
を受講した際のおぼえ書きです。
https://learn.unrealengine.com/course/2855684
スカイライトのキューブマップ指定
・ライトの SourceType を SLSSpecifiedCubemap に変更
・一例として Cubemap を HDRI_Epic_Courtyard_Daylight に変更
するとキューブマップを指定することできます。
ちなみにキューブマップを開くと
こんな風なepic本社だったりします。
動的にシーンの輝度調整を無効にする方法
・ポストプロセスボリュームを配置
・レンズ>Exposure の
最小輝度、最大輝度を1.0にすることにより
シーンの明るさが動的でないようにできます。
このコースでは Actor Pawn Character のに関して解説がなされており。
利用された図が非常にわかりやすいです。
Actor - ワールド配置物
+ Pawn - 操作可能なもの
+ Character - 歩行可能なもの、MovementComponentを持っています。
Component - Actorの部品
Controller - PlayerController AIController があり Pawnクラスが持っています
GemeMode - ゲームのルールです。
※動画からパクった図
親クラスの変数の表示方法
・目のマークをクリックし
・継承した変数を表示にチェックを入れることで
親クラス(コースではBaseCharacter)の変数を表示することができます。
SpringArmコンポーネント
SpringArmコンポーネントはカメラを子階層に追加することで、
カメラまでの相対的な距離を指定するコンポーネントです。
・DoCollisionTestのチェックを外すことでコリジョンテストを無効にできます。
・InheritPitch Yaw Roll のチェックを外すことで回転を無効にできます。
使用例として、こんな感じに親子階層を作って利用します。
ProjectileMovementコンポーネント
アクターを発射物としてあつかうための専用コンポーネントです。
IntialSpeedに速度を入力することができます。
こういった簡単な処理は、ついつい自前で製作してしまいそうになりますが、
すでに出来上がっているものがあるのでこちらを利用しましょう。
タグ付けにる判別
プレイヤーが銃などを利用し攻撃した時の
発射物が接触したものがエネミーなのかどうかを判別することがあります。
その際、方法のひとつとして ActorTag を利用し判別することができます。
設定方法)
・クラスのデフォルトを選択
・Tagにタグ名を記述(ここではfriendlyとしています。)
判別方法)
・ActorHasTagノードを利用することで
接触物のアクタータグを判別することができます。
プレイヤーの死亡と再生成の仕方
事前にGameModeクラスに
新しいプレイヤーの生成処理 & 操作キャラのバトンタッチ処理
を作っておく必要があります。
バトンタッチは Possessノードを利用します。
そしてPlayerクラスでは死亡した際に
GameModeクラスに制作した 再生成&バトンタッチ処理 を呼び出すようにし、
自身をDestroyすることでプレイヤーの死亡とリスポーン処理を実現できます。
※ここで重要なのはゲームのルールに関する処理は
GameMode に書くべきということです。
こういった処理はついついレベルBPに書いてしまいがちです。
実際、私はそうしてしまっていることがよくありました。
本コースではGameModeに実装する方向で解説されています。
(エネミー生成のトリガー処理などもGameModeに書くべきです。)
ボックスボリューム内のランダムな座標の取得方法
画像のようにRandomPointInBoundingBoxノードを利用すると
ボリューム内のランダムな位置を楽に取得することができます。
アクターを一定時間後破棄する方法
発射物を一定時間後に自動削除したい場合などに利用します。
・クラスのデフォルトを選択
・アクタ>InitalLifeSpawn
に書きされるまでの時間を指定することで自動的に破棄することができます。
簡単な処理なので意外と自分で作ってしまいそうなところですが、
こういった機能は最初から存在するため利用した方がよいです。
ブレンドスペース
ブレンドペースは複数のアニメーションを
値に応じてブレンドする機能です。
軸の設定方法)
アセット詳細タブの
水平軸の Name Minimum Maximum の値
垂直軸の Name Minimum Maximum の値
をそれぞれ入力することで
ブレンドする際のグラフの軸を指定することができます。
グラフの設定方法)
あとはアセットタブから
グラフ上のポイントごとのモーションを配置していきます。
移動方向とキャラの向きの差分の取り方
・GetVerocityノードを取得しRotationFromXVectorで移動向きを取得
・GetControlRotationからポーン自身の向きを取得
・Deltaノードを利用
すると2角度間の差分を取得することができます。
GetControlRotationで自身の向きを取得できるのは発見でした。
複数の死亡モーションからランダムなものを再生
整数値でのブレンドポーズノードを利用すれば
アニメーションBPで複数のモーションから
ランダムなものを一つ再生することができます。
※ピンが足りないときは
右クリック>ブレンドピンを追加
でピンを増やすことができます。
ソケットの追加方法
スケルトンに対し、武器などをアタッチする際の追加ポイントを
をソケットといい、自由に追加することができます。
・アニメーションシーケンスを開く
・スケルトンタブを選択し
・適当なボーンを右クリック
・ソケットを追加を選択
するとアタッチポイントを追加することができます。
プレビューアセットの指定
さらにデバッグで武器をアタッチさせ確認することができます。
装備中のイメージを確認しやすいので
もしイメージと違ったら、ソケット位置を調整することができます。
・ソケット右クリック
・プレビューアセットを追加を選択
・確認したいアセットをリストから選択する
イメージとちがったらソケット位置を調整しましょう
プレビューして問題ないようなら
ゲーム中ではAttachActorToComponentノードを利用しアタッチします。
アニメーションBPの子ブループリント
アニメーションBPを全キャラ分、
たとえば、人型、剣士人型、武道家人型、魔法使い人型と
共通する部分もあるのに、全部作らなくてはならないのかというと
そうではなく、
アニメーションBPも子ブループリントを作ることができ、
違う部分をオーバーライドすることで量産することができます。
・子ブループリントをひらく
・アニメーションBPを右クリック
・子ブループリントクラスをを作成を選択
でキャラのABPをもとにした
エネミーのABPを作成することができます。
・子ブループリントをひらく
・アセットオーバーライドタブを選択
・差分になる部分の上書き値を設定
この手順で子ブループリントの差分の部分を指定できます。
※この機能は正直しりませんでした。
てっきり全部根性で作るのかと思っていました。
入力を無効化する方法
方法はいくつかありますが、このコースでは
プレイヤーはDisableInputノードを利用し入力を無効化し
エネミーはDetachFromControllerPendingDestroyノードを利用し
コントローラを破棄することで移動を無効化しています。
プレイヤー操作無効化)
エネミーの移動無効化)
フィル指定
ヴィジェットBPのフィル指定にチェックをいれると
のこる領域を埋め尽くすように配置できます。
パッケージTIPS
プロジェクト設定>パッケージ化>圧縮およびクック済みのパッケージを作成
にチェックを入れることでファイルサイズが小さくなります。
プロジェクト設定>パッケージ化>パッケージ化されたビルドに含めるマップのリスト
にパッケージ対象のレベル一覧を作成することができます。
パッケージは周知のとおり
メニューバーのファイル>プロジェクトをパッケージ化
から作成します。
出来たやつ)
youtu.be
このコースでは空のレベルから作成し
最速でシンプルなシューターゲームを作るまでの手順を解説しています。
内容は幅広くC++についての解説も入っているほどです。
講師のテンションが高いです!!
自動輝度調整の無効化、アクタとポーンの関連性、タグ付けにる判別、
ProjectileMovement、操作キャラの変更、ブレンドスペース、アタッチ、
アニメーションBPの子BPの作り方、入力の無効化、ヴィジェットBP
など非常に幅広く学ぶことができます。
ゲームのルールをレベルBPではなくゲームモードに実装しているところは
これまでの私が作ってきた部分を見直す重要な情報と思えました。
またアニメーションBPを継承して使用する方法など
あたしい発見もありました。