- Unreal Engineを手探りで学んだ時の自分用メモ
- 覚え書き・その日のうちに記事を書こうと思うので多分間違い・解釈違いが多い
- Unityを少しやったことがある
今回の目標
Unreal Engineの講座とか動画を先に見ても良いのだけれど、
自分で発見しないと覚えられない人間なので、
先にUnrealEngineのテンプレートプロジェクトの内容を理解出来るようにしようと思う。
あたって砕ける。
とにかくUnreal Engineをインストールして起動
テンプレートがいくつかあるらしい。
これをとりあえず全部理解する所が目標。
直感だけど、多分サードパーソンが一番基礎的でシンプルな実装になると思うので、サードパーソンから見ようと思う。
スクショを取る前に少しレイアウトをいじってしまったが、基本的にはUnityと機能の単位は変わらない印象。
- コンテンツブラウザがちょっとこのレイアウト使いにくそう
- macのFinderかwindowsのフォルダシステムかどちらかに寄せて欲しい。使えるから良いけども
- 逆にアウトライナーは、Unityには無いフォルダ機能があって、これは整理しやすくていいかも
- 操作はWASDとスペースキーのジャンプで、カメラをマウスの上下左右で動かせるっぽい
- 青いブロックはキャラクターがぶつかることで動かせるらしい
- クリックとかは無さそう
- 地形のオブジェクトをブロックの組み合わせで作っている
- 地形以外は
Lighting
PlayerStart
WorldDataLayers
WorldPartitionMiniMap0
の4つかな - とりあえず今回学びたいのはキャラクターの移動とかカメラの操作とかなので、
PlayerStart
から辿ってみる
PlayerStart
ってなんだ
PlayerStart
を選択した状態で詳細を見たら、てっきりそこにStartするキャラクターを指定するインターフェイスがあるのかと予想していたけどなにもない。
Startする位置を指定するだけなのになんで CapsuleComponent
がついてるのかも気になる。
座標を指定するだけじゃだめなんだろうか。
アウトライナーをよく見るとUnityみたいにGameObjectみたいな概念が無くて、機能を直接レベル上に配置するスタイルなんだろうか。
逆に言うと1つのGameObjectに対していろんな機能をつけることは出来ないと。まぁそれはある意味シンプルでいいか。
少なくとも詳細にヒントが出ない以上、アウトライナーから全容を辿ることは難しそう。
コンテンツブラウザから攻める
アウトライナーからだと何もわからないのでコンテンツブラウザから見ることにする。
多分このThirdPerson内に操作とかがまとまっているはず。
人間っぽいブループリントを開く。
Add Input Mapping
Camera Input
Movement Input
Jump Input
とグルーピングされてるのでわかりやすくなってそう。
ノードの仕組みはわからないけれど、 Triggered
が 実行
に渡されているということはこのタイミングでノードが実行されるということだろうか。
Event BeginPlay
とか EnhancedInputAction
とかいうのはタイミングの概念があるものだと思うし多分そうなんだろう。
赤いノードがイベントで、 Triggered
を持つもので、緑のノードがGet系、青のノードがSetとか何かの外に影響のある機能を呼び出すものかな。
ノードの処理もわかりやすいしブループリントええやん。
self
ってなんだ
Camera Input
と Movement Input
はそれぞれ青いノードに繋げてるけど、
その両方で target
が self
と指定されてるけどなんで?
今気付いたけど、キャラクターのブループリントなのになんでCameraの操作が入ってるんだ??
よく見るとアウトライナーにCameraというオブジェクトがない。
ブループリントのコンポーネントとしてFollowCameraというのがあるけれど、これがあのCameraなんだろうか。
良いのか?キャラクターが増えたらその分だけCamera増えるけど。
まぁもしかしたらUnreal EngineではCameraというものは概念的なもので、
このFollowCameraにはUnityでのCameraの機能自体は無いのかもしれない。
エンジン側でCameraを持っていて、このコンポーネントが指定している位置にCameraを持ってくるとかかな。
まぁそれなら許してやるか。
それよりも self
の方だよ。
この2つのノード両方とも Target is Pawn
なのに、一方はCameraを操作していて、もう一方はキャラクターの移動を操作しているのはなんでだろう。
(まぁ Target is Pawn
が何を指しているのかも、わからないんだけれども)
他に差分は無さそう。
この Movement Input
と Camera Input
がたまたま両方Vector2だったので、
入力を「マウスで移動操作」「WASDでカメラの操作」という形に入れ替えても、
WASD押すとキャラクターがピクピク動き出すので、
なんかブループリント上には表示されていない隠された依存というか接続がありそう。
やはり手探りでUnreal Engineは無理だったのか?
負けた気がするのでGoogleに聞く前に一通り確認する。
手探り置いといても、こういうR◯Gツクールみたいな直感的じゃなくて推測出来ないインターフェイスは嫌いだ
30分後
なんだこれ。
つまり 「Add Controller Yaw Input
はキャラクターのYawを回転しない」ということなんだろうけど、じゃあ何を回転してるんだろう。
実際に動かしてみ見るとCameraが回転しているので、Cameraに対して操作が行われているということは、
仮にこのチェックボックスをtrueにしたら、キャラクターが回転してその2倍の速度でカメラが回転するんだろうか。
と思ったら何か予想とはちょっと違ったけど、それっぽい動きになった。
そうか、Unityじゃないから親の位置や回転に依存しないということだろうか。
位置が依存している用に見えるのは多分こっちのスプリングアームコンポーネントの機能だと思う。
このスプリングアームコンポーネントがない状態だと、キャラクターはカメラは初期位置から動かないんじゃないかな
いや動いた、わかんないや。
ああいや、Add Movement Inputがキャラクターとカメラ両方に移動値を加えてるから同じ位置にあるのかな
スプリングアームコンポーネントと干渉する気がするけど、どうなんだろう。
いや、Boxをブループリントに追加して見ると親の位置や回転に依存しているように見えるな。
それに、 Add Controller Yaw Input
は今の理解だとあくまでキャラクターが入力を無視しているだけなんだから、カメラの回転に合わせてBoxも回転していないと辻褄が合わない。
30分後
よくわからないのが、
キャラクターの Use Control Rotation Yaw
が false
の時はカメラに対して Use Controller Rotation Yaw
が機能し、
キャラクターの Use Control Rotation Yaw
が true
の時はキャラクターのみに Use Controller Rotation Yaw
が機能しているように見える点。
キャラクターの回転の2倍の速度でカメラが回転すると予想していたけれども。
そしてそのルールが、Camera以外の他のオブジェクト(Boxとか)に恐らく適用されていない点。
うーんなんか本当にCameraだけ特殊な処理をしている気がするな・・・。
なんか余計な親切・余計なお世話感がある。Unreal Engine苦手になってきた。
操作を見る
Cameraの回転に関しては、もうそういうルールだと覚えていくしか無いとして、操作を見る。
まぁ多分これか
めっちゃ抽象化されていて親切じゃん。
Unreal Engine好きになってきた。
これはすぐに理解出来そう ヨシッ。
今日はこれぐらいにする。