はじめに
チュートリアルが見つからなくなってきましたのでEpic games JPさんが独自でやっているYoutubeを見る続編です。
今回見る動画ではBluprintについての解説があるとのことなので、楽しみに見てみます。
やる前の先入観としてはBlenderを触ってきて偶に目にするBluePrintという用語は設計図でしたね。青いバックにCADっぽい細い線で設計図が書かれているみたいな絵をよく見ていました。
参照元
『猫でも分かる UE4を使ったゲーム開発 超初級編 #2:Blueprintをさわってみよう
www.youtube.com
猫でも分かる UE4を使ったゲーム開発 超初級編 #2:Blueprintをさわってみよう
対象者
この講座(動画)の対象者として下記のような方が挙げられている
これは私にピッタリです。
Blueprintとは
- Visual Scripting Systemとのこと
- Scratchのようにコードを描くのではなく視覚的にプログラムする手法
導入された経緯
- エンジニア以外の方がものづくりできる環境を提供するため
- このような図が紹介される。コーディングのみがアイデアを形にする手段だった時、具現化する人がプログラマのみでボトルネックとなる
- そうではなく簡単なものであれば個々で作成できるようにするというのがVisual Scripting Systemの発生経緯との事
- これによってプログラマは仕事がなくなるのではなく、より複雑な処理に集中することができるようになる
- BluePrintはぱっと作れるとの事
- ノードベースはBlenderでAnimation NodesやSverchokの体験をシているので個人的には簡単に作れるということに関して同意できますね。
どんな機能があるか?
パーツ(コンポーネント)の組み合わせ
Componentと呼ばれるパーツを組み合わせていく
ダブルクリックで開く
ブループリントが開かれる
現状どのようなパーツが組み合わさっているかはコンポーネントから確認可能
- Meshは3DCGのキャラクターを指す(マネキン)
- Camera Component はゲーム画面を写す為のもの
- CameraBoomはキャラクターとカメラ間の距離をどの程度にするかなどを設定するとのこと
- ArrowComponentはデバッグ用
- どちらが前方方向なのか可視化
- どちらが前方方向なのか可視化
- CapsuleComponentはコリジョン(当たり判定)に使う
- CharacterMovementはキャラクターが動けるようにする
- これによって移動・ジャンプなどができる
- 壁にあたったり
- 落下したりする
- アニメーションはまた別で管理している。とのこと
- まだ関係性がよくわからないので?になる。
Componentを追加してみる
- コンポーネントを追加より球を追加
- 位置を調整
- FollowCameraを選択した状態で追加したからなのか親がカメラになっている
- ドラッグしてMeshの子にする
- Meshのどの部分を親にするかを親ソケットから設定できる
- 頭を親に設定
- 球が横にずれたが、トランスフォームの黄色いボタンを押すと修正できるとのこと
- この状態でプレイすると頭の部分が球になっているキャラを動かせる
- 今回は球だが、ヘルメットなどを装着しているようなイメージはこのように作成できるとのこと
- 親ソケットを手にすると剣や銃を持っているようなキャラクターも作成可能
- ライトなどでも同様に親子関係を行うことで頭にライトを付けているようなキャラクターを簡単に作成可能
- コンポーネントはそれぞれ異なる役割・機能を持つ
- コンポーネントが持つプロパティ(パラメータ・データ)を変更することで挙動を調整できる
Componentのプロパティを変更してみる
- CameraBoom(Spring Arm Component)を選択
- Enable Camera Lagを有効化
- Camera Lag Speedを1にする
- コンパイルしてプレイする
- キャラクターを追うカメラに少しラグが生じるようになる
- プロパティはレベルの詳細からでも変更可能
- 歩行スピードをレベルから変更する例
Componentまとめ
- 一気に挙動を変えたい場合はコンポーネント上で修正
- どうやって学習していけばよいか?
- テンプレートがたくさんあるので使って理解しましょう
- ドアを開くアクションを付け加えたい場合などは、「UE4 ドア」などで検索すると良い記事などが見つかる
- テンプレートやサンプルプロジェクトはしっかり作り込んでいるので参考になる
アルゴリズム
- ゲームのキャラクターの動き
- ギミックなどを組んでいく
- 基本的な考え方
- どんな時・タイミングに
- ボタンが押された
- 攻撃されたなど
- どんな処理を
- どんな順序で実行するか?
- どんな時・タイミングに
- ここで再度ThirdPersonCharacterのブループリントを表示
- インプットアクションの定義 ジャンプを例に解説
- Pressed はジャンプボタンが押された時
- Released はジャンプボタンが離された時の処理
- ノードは右クリックから配置可能
BluePrintを使って簡単なギミックを作ろう
配置
回転する長方形のBOXをつくるとのこと。
- コンテンツブラウザに新規フォルダを作成する名前をEGJとする
- 新規レベル defaultを作成
- レベルを保存
デフォルトではプレイヤースタート(プレイヤー開始位置定義)のみが配置されている - FloorをAlt+Dragで床を複製
この間に回転する床を設置し、回転する床を経由して隣のフロアへ移動するようにするとの事 - EPJフォルダで右クリックして
- Actorをつくる
- 名前をBP_RotatingFloorに変更
- 名前は自由。
- BP_と付けているのはBluePrintを表していて検索したらBPの一覧として表示されるようにしているとのこと
- BP_RotatingFloorをダブルクリック
- コンポーネントを追加からキューブを追加
- そのままレベルに配置
- 見ながらサイズを変更
- インスタンスからBlueprintに変更を適用する
- 今度はこの板を回転させる
- 色々なやり方があるためそれを色々紹介するとのこと
回転 1
- BluePrintのイベントグラフを表示する
- よく使用するイベントは最初から配置してある
- ここで紹介が入る
- BeginPlay 初めて動くときのイベント
- ActorBeginOverlap このBluePrintが何かと重なった時のイベント
- Tick 常に動作する
- Frame毎に発生するイベントだろうか
- 右クリックしてrotateアクションを検索し追加する
- LocalとWorldの違いはなんだろうか??
- Tickノードと接続する
- Yを1にするとTickイベントのたびに1度(Degree)ずつY方向に回転する
回転 2 Get + Set
– 回転1と全く同じ回転を行う
– Get で現在の角度を取得
– Set にわたす前にCombineRotationで1を足す
– Set する
回転 3 RotatingMovementコンポーネント
- RotatingMovementを追加
- 追加するだけでセットされている
- 回転の定義はロテーティングコンポーネントから可能
- 360度としたもののいつまでに360度回転するのかわからず
- 追加するだけでセットされている
移動 1
- 回転のバリエーションの紹介が終了し、視聴している方よりCubeが移動するようなレベルの作成方法の質問を受けてのチュートリアル
- 左右に配置されている壁の間を動く Cube の距離を確認する
- Yを見ると964となっているため最小値は964とする
- Cube右に移動させ丁度いい所で止めると 2672 となっている為これを最大とし、最小と最大をいったり来たりするようにする
- アクタを動かす為AddActorLocationを配置。Yを10とする
- これによっていったり来たりはしないがCubeは動くようになる
- Yを外部から制御するため変数化する
- 変数が作成されるので名前を Speed に変える
- 目のアイコンをクリックしコンパイルするとレベルの詳細より値が変更できるようになる
- 結果
- 結果
- Actor(Cube)の現在位置を知るためにGetActorLocationを配置、さらにXYZの内、Y情報のみを取得するためReturn Valueを右クリックして構造体品を分割をクリック
- 結果
- 結果
- 論理演算を追加する
- ブランチ(if)を追加し接続
- speed変数に値をセットするためspeedをドラッグしsetを選択
- 条件がTrueだった場合の値を設定
- 実際に動かすとCubeが逆方向に進んでしまう
- 論理演算の不等号が間違っていたため修正する
- 最小値より小さくなった場合の処理も同様に追加
- この値のノード構成はSverchokというBlenderアドオンとほぼ同じためすんなり理解できた。
移動 2
- 実はコンポーネントで設定した点を行ったり来たりするものはすでに存在しているとのこと
- ブループリントを触ってほしかったため最初の移動を実装したとのこと
- レベルでCube を選択し、コンポーネントを追加をクリック、InterpToMovementを追加
- IterpToMovementの詳細パネルよりコントロールのControl Pointsにある+マークを必要なだけ押す。今回は2点間の移動のため2度押す
- Relativeにチェックが入っている場合、現在位置からのオフセットになるとの事
- Relativeにチェックが入っている場合、現在位置からのオフセットになるとの事
- 2番目の control pointsのYに2672-964と入力。
- Durationは点から点へ移動が完了する秒数との事。2に設定しておいた
- ビヘイビア(振る舞い)でPing pongを設定するといったり来たするとの事で設定
- これにより移動1と同等の処理が完了
- こちらのほうが簡単😃
最後に
ブループリント=設計図という認識でしたが概ねその認識で良さそうですね。
UE4はifなどもブランチと言い換えたり、オブジェクトをアクタと言い換えたりしていますね。一般的な呼び方とはまた違った呼び方をするのはなにか目的があるのでしょう。何なんでしょうね。気になるところです。
しかしめちゃくちゃ開発しやすい…マリオ的なものが作れるようになっていればと思ったけど、簡単に作れそうだなぁ。
しかし作れなかったら嫌なのでもう少し慎重に学習することにします。
メモ
- UE4では3DCGのキャラクターの事をメッシュという
- コンポーネントのプロパティについて
- 変更されたプロパティの横に出てくる矢印をクリックするとデフォルトの値に戻せる
- プレイ中でもF8を押して編集モードに入れ、そこでプロパティは修正できる
- F8を押して修正した値は再度F8を押すことで元の値に戻る
- 値をそのまま適用したい場合は K キーを押す
- レベル上で修正する事とコンポーネント上で修正する事の違い
- UE4 にはUnreal C++という独自の言語がある
- Unreal C++は使わなければならないわけではなく必須ではない
- BluePrintのみでリリースされたゲームも多数存在する
- 速度差はC++のほうが早いが、ゲーム速度で大体問題となるのはその部分ではない
- Ctrl+Fで配置されたノードを検索、クリックするとその配置箇所に飛んでくれる
- これは便利
- 複数ノードを選択して折りたたむ事も可能
- Blenderで言うところのグルーピング
- BluePrint ActorとPawnの違い
- AIで動かすかどうか。動かす場合はPawn。
- 思考ルーチンを持って動作するのがPawnという認識かな。
- AIで動かすかどうか。動かす場合はPawn。
- ノードの切断方法は接続部分を Alt + Click
- 床を動かしたい場合はトランスフォームからムーバブルを選択する
- プログラミングの if のことをブループリントではブランチ(枝分かれ)という
- if で検索してもブランチは表示されるとのこと
- ノード選択→cでコメントフレーム作成