視聴メモ「Blueprintをさわってみよう」(2)
今回のメモの範囲(1:15:10 ~ End)
※ UE4(4.25.0)の初心者向け動画を視聴して、UE5(5.0.0早期アクセス)の学習をします
※ 全内容のメモではありません 学習者は元動画の視聴を強くお勧めします
※ 略記 UE = Unreal Engine , BP = Blueprint
Agenda
1. Blueprntを使って簡単なゲームギミックを作る
1.1. レベルの作成
1.1.1. コンテンツブラウザ上で作成する方法
コンテンツブラウザ上で右クリック -> 基本アセットを作成 -> レベル
右クリックした場所に空のレベルのファイルが作成される
レベルには何も配置されていないので実行しても黒い画面のまま
1.1.2. ファイルから新規に作成する方法
ファイル -> 新規レベル ※ ショートカットはCTRL + N
テンプレートを選択してレベルを作成する
- Default
- TimeOfDay
- VR-Basic
- 空のレベル
この方法で作成したレベルはファイルに保存されていない
ファイルメニューの「カレントレベルを保存」を選択して保存すること
ショートカットはCTRL + S
1.1.3. 実行時にキャラクターが出てこない場合のおまじない
設定 -> ワールドセッティング -> GAME MODE -> ゲームモードオーバーライド -> ThirdPersonGameMode
※ ThridPersonGameModeはBP
1.2. 床の配置
1.2.1. Bluprintアセットの作成
コンテンツブラウザ上で右クリック -> 基本アセットを作成 -> ブループリントクラス -> 親クラスを選択
親クラスを選択してBPを作成する
- Actor
- Pawn
- Character
- Player Controller
- Game Mode Base
- Actor Component
- Scene Component
ActorとPawnは似ているが、PawnはAIで制御されることを前提としている
今回はActorで床を作成する
1.2.2. Cubeコンポーネントの追加
床のBPアセットをダブルクリックして開く
コンポーネントパネルでCubeコンポーネント(Static Mesh Component)を追加する
1.2.3. 床のBlueprintアセットをレベルに配置
コンテンツブラウザからビューポートに床のBPアセットをドラッグ&ドロップする
詳細パネルでCubeを選択し、トランスフォームの拡大値で床の大きさを調整する
# BPをビューポートにドラッグ&ドロップすることでBPのインスタンスが作られる
1.2.4. インスタンスの変更値をBlueprintに反映
詳細パネル -> Cube選択 -> 「このアクタのブループリントを編集」
-> 「インスタンス変更をブループリントに適用」
# 最後のところで「インスタンス変更をブループリントのデフォルト値にリセット」を選択すると
# 現在保存されているBPのデフォルト値で上書きリセットされる
1.3. イベントグラフ
1.3.1. イベント
イベントグラフには3種類のイベントが無効の状態で配置されている
- BeginPlay(プレイ開始時)
- ActorBeginOverlap(アクタと重なった時)
- Tick(常にくり返し)※tickは「時を刻む」の意
1.3.2. ノードの配置
イベントグラフ上で右クリックして配置したいノードを検索する
1.3.3. Print Stringノード
ビューポートの画面上やログに文字列を出力するノード
イベントグラフ上で一時的にノードをつないでデバッグするのに便利
1.3.4. ノードの設定値を変数に昇格
ノードの設定値を右クリックして「変数に昇格」を選択することで
ノードの外から値を変更(Get, Set)できるようになる
1.3.5. プロパティの公開
マイブループリントの変数欄で目のアイコンをクリックして開かせると
該当の変数がインスタンス上で変更可能になる
# 閉じた目のアイコンはprivate、開いた目のアイコンはpublicのイメージ
1.3.6. 構造体ピンの分割
構造体ピンは右クリックして「構造体ピンを分割」を選択することで
構造体のそれぞれの値を個別に扱えるようになる
Vector値をX, Y, Zのそれぞれの値にばらして必要なものだけを利用したいときに便利
1.3.7. 分岐と比較
UEでは分岐のことをブランチという ブランチノードは"if"で検索するのが早い
比較ノードは"= > <"などの記号で検索可能 ブランチノードとリンクして使う
# ノードの検索はプログラミング言語の勘所が役に立ちそう
1.3.8. Sequenceノード
通常、処理を加えていくとBPは横に長くなってしまうが
Sequenceノードを挟むことによって縦に伸ばすことができる
ある程度の処理の塊でSequenceノードを挟むと分かりやすいBPになる
コメントでまとめるとさらによい
1.4. 床を回転させる
1.4.1. AddActorWorldRotationノードを利用する方法
AddActorWorldRotationノードをイベントグラフに配置してTickとリンクする
AddActorWorldRotationのXYZの値(回転量)を変更する
この値はアクタのトランスフォーム回転値(XYZ値)に対応している
動きとしては
AddActorWorldRotationのXYZに設定した値がアクタの回転値に足しこまれる
それをTickイベントで繰り返すことによってアクタが回転する
1.4.2. GetActorRotationノードとSetActorRotationノードを利用する方法
GetActorRotationノードで現在のアクタの回転値(XYZ)を取得
CombineRotatorsノードでXYZの値(回転量)を合算する
足しこんだ値をSetActorRotationのNew Rotationに設定する
一連の流れをTickイベントで繰り返すことによってアクタが回転する
# 通常のプログラミングでgetterとsetterを使って状態を変化させていくイメージ
# UEでもgetter(Getノード)とsetter(Setノード)の概念は重要のようだ
1.4.3. RotationgMovementコンポーネントを利用する方法
コンポーネントパネルからRotatingMovementコンポーネントを追加する
RotatingMovementコンポーネントの詳細パネルに表示されている
ロテーティングコンポーネントのRotation Rateの値(XYZ)を変更する
1.4.4. どの方法が一番よいか?
将来、ケースに合わせて最良の方法を取捨選択できるようになるために
今はいろいろな方法を試して、選択肢を増やすことを意識した方がよい
# プログラミング言語の学習も同じ 初学者が忘れがちな意識
# 仕事でもよく聞かれる質問だから回答として覚えておこう
1.4.4. アクタの可動性
トランスフォームの可動性が「スタティック」になっているものは動かせない
動かしたい場合は「ムーバブル」に変更する
ムーバブルではないものを動かすとエラーログが出力される
# ということは、動いているものを一時的に止める場合に
# 可動性をスタティックに変更するのは好ましくない方法なのかな
1.4.5. アクタからBlueprintを作成
ビューポート上でアクタ選択 -> 詳細パネル
-> 「このアクタを(中略)ブループリントクラスに変換する」 アイコン
-> 「選択からブループリントを作成」 -> 作成方法選択
1.5. 床を左右に動かす
1.5.1. AddActorWorldOffsetノードを利用する方法
AddActorWorldOffsetのXYZに設定した値がアクタの位置値に足しこまれる
ブランチノード(条件分岐)を併用して戻ってくる動作を実現
# 全体的に煩雑になるがブランチや変数の練習にちょうどよい
1.5.2 InterpToMovementコンポーネントを利用する方法
床のBPにInterpToMovementコンポーネントを追加する
コントロール欄のControl Pointsでポイントを2点追加する(初期位置、移動位置)
コントロール欄のDuration(移動の所要時間)を指定する
ビヘイビア欄のBehaviour Typeで"Ping Pong"を指定する
# この方法は、アクタを置いた位置からの移動先を指定するので汎用性が高そう
# コンポーネントの追加はBPでもインスタンスでも用途に合った方を選べばよさそう
1.6. 他
UEでは移動関連のノードを検索する場合、"location"で検索するとよい
UEの数値入力欄は計算式の入力が可能 入力欄に計算結果が指定される
ノードをコピーしてテキストエディタに貼り付けるとC++のコードになる
ネットで公開されているBPを自分のUEにコピーできるサイト