次の動画から読み取れる「要点」をまとめる。
『猫でも分かる UE4を使ったゲーム開発 超初級編 #2:Blueprintをさわってみよう
作成されていれば中身はなにもいじってなくてOK
ビジュアルスクリプティングシステム。
「ノード」と呼ばれる箱をつなげるだけで視覚的にプログラムが作ることが可能
つまり**「プログラミング言語がかけなくてもプログラムが作れる」**
左下のコンテンツブラウザからThirdPersonCharacter
をダブルクリックで開く
ビューポートが開きキャラクターが表示されている。
※ビューポートが消えている場合はメニューから「ウィンドウ」>「ビューポート」をチェック
ノードでプログラムを作る前に覚えておくこと。
ブループリントの中身はさらに「コンポーネント」の集まりである。
左上のウィンドウにどのコンポーネントがあるか表示されている。
上の画像のようにコンポーネントが構成されている。
とりあえず、そんなのがあるんだ程度で認識しておく。
こちらは余談的に一歩進んだ内容。
コンポーネントを追加
から球
を追加Sphere
)をドラッグしてMesh
の上にドロップするとMesh
を親にすることができる(これを親子付け
と呼ぶ)Sphere
をクリック、右の詳細ウィンドウから「親ソケット」をHead
にこちらだけ少し特殊なコンポーネント。
動きを管理するコンポーネント。
クリックして右側のプロパティを変更するとキャラクターの移動速度などが変更できる。
画面右上「プレイ」で実際にゲームを実行して確認が可能
この状態でF8キー
を押すとゲームを実行しながらパラメータを変更可能
変更したいキャラをクリックして移動速度を変えてみる
F8
でゲームに戻ると移動速度が変わっている上で自由にテスト中の移動速度などが変更できるが停止すればパラメーターは戻る。
そのままのパラメーターをキャラクターに適用したい場合
kキー
でパラメータを元データに適用※必ずキャラが選択されていること
3体配置した場合は各個体デフォルト値は皆同じである
デフォルト値はブループリント内に記載してあるデータである
このままブループリントのパラメータを変更すると3体ともパラメータが変わる(BPの値)
特定の一体を選んでパラメータを変更すると、その個体だけパラメータが変わる(真ん中だけジャンプ力を低く等)
個体のパラメータを変更した後ブループリントを変更した場合、配置した個体側のデータで上書きされる
※最後の行だけ注意。実際に配置されているキャラのデータを変更した場合はBPのデフォルトを上書きするという仕組みなのでBPをいくら変更しても上書きした値に設定される。
実際に配置したキャラクターのパラメータを弄った後、それをデフォルトにしたいと考えた場合。
その値をブループリントに書き込んでしまうことができる。
値が入っている個体をクリックして選択
ブループリントを編集
をクリック
インスタンス変更をブループリントに適用
をクリック
これでブループリントそのものが書き換えられる。
ブループリントをレベル(ゲームのステージ)にドラッグドロップして実際の個体として配置した場合はこれをインスタンスと呼ぶ。
ブループリントは設計図のようなもので、それを元に実際に作成されたものがインスタンス。
ブループリントが1枚あればいくつでもインスタンスを作ることができる。
ノードを使ってアルゴリズムを組んでいく。
ノードの基本は箱を繋げていくだけでOK。
先程のサードパーソンキャラクターをダブルクリックしてビューポートを開く。
左側の枚ブループリントのイベントグラフ
をダブルクリック
はじめは複雑になっているが今回はざっくり理解する。
赤色のイベントに反応してPressed(押された)とReleased(離された)に分かれる。
別れた先の「処理」が実行される。
白色の紐はドラッグドロップでつなぐことができる
余談:切り離されたノードが残っていても問題はない
余談
新しくマップ(レベル)を作ってみる
コンテンツブラウザでマップ用のォルダを作っておくと便利
レベル
を追加しておくファイル
> 新規レベル
でデフォルトを作ってみようワールドセッティング
> Game Mode
> ゲームモードオーバーライド
> ThirdPersonGameMode
に変更最初に作った変な玉をカブった奴が出た。
初心者がひっかかる点に気づいたので記述しておく。
この時点でコンテンツブラウザにあるレベルはまだ「真っ暗」なままである。
あくまでテンプレートで作った画面上のマップは**メモリに読み込まれているだけで「保存されていない」**のである。
したがって次の手順を必ず踏んでおく
ctrl+s
かファイル>レベルを保存
をクリックするこれで初めてレベルは保存される。
※厳密には上の作業でNewMap
を予め生成しておく必要はなく、レベルを保存時に新しく名前を付けて新規作成しても良い。
ブループリントクラス
Actor
を選択する。※Pawnが似ているがAIを入れる場合等に使うので今回はActor
コンポーネントを追加
> キューブ
※ここで詳細の「Cube」をクリックせず拡縮を行った場合は後ほどBP側にデフォルト値として書き込む時に書き込めない事がわかった。必ずCubeをクリックしてからサイズ変更しよう。
※これで今レベル上で設定したパラーメータ(拡縮の値)がそのままBPに書き込まれる。
イベント Tick
はゲームが走っている間ずっと信号が出ているので
このイベントが発動する度に少しずつ床を回転させてやれば良い。
Rotateなどで検索してやればある程度絞れるのでそうやって探そう
AddActorWorldRotation
」Delta Rotation
に設定した値だけ毎Tickごとに回転するのでZに0.5
ぐらいを設定するGetActorRotation
: アクターのRotationを取得CombineRotators
: 回転を足し算するSetActorRotation
: アクターの回転を入ってきた回転の値にセットする
ちょっと余談的なので覚えなくて良いかも。
「Get(とってくる)」と「Set(設定する)」があるよということを覚えておく
実は既にコンポーネントが用意されているのでノードを組む必要はなかった。
RotatingMovement
はコンポーネントを追加ボタンから※ローテーティングコンポーネントの設定「Rotating Rate
」で回転設定は変えられる。
RotatingMovement
を入れてもトランスフォーム
> 可動性
がスタティックでは動かない
※エラーが出る
その場合はムーバブルに変更する
今度は床を移動させたいという質問から発展。
移動は一方向だけではなく、帰ってくる処理が必要。
ここからは応用編だと思うので記事にはせずざっくり。
このようなプログラムは変数と条件式を使う。
ノードで作る必要はないが練習に丁度よい模様。
変数と条件は別で解説記事を作った
※基本解説なので記事で移動床は作ってない。
変数と条件式がわかれば簡単かと思う。詳しくは動画を参照。
実はコンポーネントが用意されているので簡単
InterpToMovement
というコンポーネントで移動床が作れる。
しかもこちらは設定した点をいったりきたりするコンポーネントなのでまさにコレ。
コンポーネントの使い方もここで書くべきでなさそうなので割愛。
動画内このあとはオマケ的内容ではあるがここも結構濃いので参照してもらえればと思う。
さて、最後は駆け足となったが、それでもかなり冗長な記事となってしまった。
次回からこの手の記事を書く場合はパーツごとに分割して単発でも理解できる記事にしたほうが良いかと思う。
ひとまず記事を書いてしまったので公開としておく。