移動ノードのmakeRotatorとBreakRotatorの使い道

お世話になります

移動ノードについてなんですがmakeノードとbreakノードの役割がよくわかりません

なぜz(yaw)の値を必要としているのでしょうか移動ですとxの左右の動きとyの前後だと思うのですが

zは高さなので(ジャンプなどに使う?)と思うのですが。。

写真一のようなノードではだめなのでしょうか?

たぶん自分はyawの役割が分かっていないんだと思います

Yawの役割というよりは、ベクトルとは何かを調べたほうが良いと思います。
(この部分はUE4に限った話ではなく、3DCG全般に関わる知識のため、ご自身で調べて勉強していただきたいところですが)

下記の記事はUnityを用いていますが、図解されており理解しやすいと思いますので、まずは精読してください。
【Unity】図解 Yaw(ヨー)、Pitch(ピッチ)、Roll(ロール)の覚え方 by ユニティちゃん(笑)


さて、問題の画像がダメなのか?という質問の答えですが、「良いも悪いもなく、場合による」というのが答えになります。
そもそもプログラミングは、状況によって好ましい答えがあるだけで、公式があるわけではありません。
それぞれの目的によって、取るべき手段が変わってきます。

問題のノードですが、breakとmakeを通すことによって、pitch成分とroll成分を排除しています。
つまりキャラクターが上下のどちらを向いていても、左右どちらに傾いていても、x-z平面上でどちらを向いているかを取れるようになっています

1のノードは、キャラクターが向いている方向からそのまま前方向と右方向を取得しています。
この場合、キャラクターが前傾していれば、ForwardVectorはキャラクターの視線方向である下向きのVectorとなるでしょう

この2つの違いは、飛行機を扱うようなゲームを作ってみると理解しやすいかと思います。


蛇足ですが、MakeRotatorやBreakRotatorは移動ノードにのみ使われるわけではない、ということは認識しておいてください。

1 Like

結論から言いますと、操作キャラクターの移動を『平面だけ』にするためです。そのためYaw(Z)以外の回転軸の値が不要のため、Yaw以外に0を入れています。
もちろん掲載していただいた画像の通りでもできますが、『確実な平面移動』のためにYaw以外を0にしているという感じでしょうか。

そもそも「座標軸のXYZ」と「回転軸のXYZ」を完全に混同しているせいで混乱しているみたいです。

「座標軸のXYZ」と「回転軸のXYZ」は『別物』と考えてください。そもそも仕様が違います。

UnrealEngineの座標軸に関する仕様は理解していると思われるので、下のURLにある回転軸に関する説明と画像引用を元に簡潔ですが説明します。

X = Roll=前後軸に対して回転

Y = Pitch=左右軸まわりの回転

Z = Yaw=上下軸まわりの回転

UnrealEngineの回転軸は上記の通りの仕様です。画像が回転軸をわかりやすく説明しているので、どの値がどの方向に回転するかが分かると思います。

画像を見ていただければわかる通り、平面の移動で影響する回転軸の値は上下軸まわりの回転、つまりYaw(Z)だけです。これだけが単純に言えば唯一平面で『横回転』しているからです

前後軸回転のRoll(X)と左右軸回転のPitch(Y)は『平面移動』をする際に関しては、不要だということが分かると思います。極端に言ってしまえば、操作キャラクターが空中を移動する必要がないため、平面上の縦回転であるPitchとRollは見なくていい、つまり「0」を入れています。

さて、掲載した画像の通りRoll、Pitch、Yaw全てを利用すると、サードパーソンのテンプレートではどのように変わるかをざっと説明します。

Roll、Pitch、Yaw全てを利用して計算しても、カメラが『真横』であれば平面移動の動作としては問題ないと思います。ただし、これには不要な値である縦軸の回転も含めたうえで計算しているため、カメラが真上、真下にに行った時点でキャラクターの挙動がおかしくなります。

試しにYawのみの状態と、Roll、Pitch、Yaw全て入れた状態でカメラを真上に向けてみてください。

それが理解できたのであれば、なぜわざわざBreakとMakeを使ってRoll、Pitchに『0』を入れているのか理由はわかると思います。

1 Like

ありがとうございます。

助かりました!!

ありがとうございます。

助かりました!!

サイトの方も拝見させていただきました

ありがとうございます。

確認んですRollはあまり関係ないのですがPITCHで下に回転しようとするのを

防ぐため0にしたということでしょうか?

よろしくお願いします

申し訳ないです、疑問の意図が読み取れませんでした。

『カメラの回転でPitchが下に回転するのを防ぐため0を入れている』という理解であっているかという質問でしょうか?

それとも『移動ノードでPitchで0にすることによって、『下方向にキャラクターが回転する』のを防いでる』という理解であっているかという質問でしょうか。

大変失礼しましたm(==)m

下の『移動ノードでPitchで0にすることによって、『下方向にキャラクターが回転する』のを防いでる』という理解であっていますでしょうか?

違います。
Pitch成分を0にすることで、キャラクターが上方向や下方向へ移動する(宙を歩こうとしたり地面に潜ろうとしたりする)のを防いでいます。

例に上がっているノードの利用先は「3Dアクションゲーム」かと思いますので、それを意識した説明にします

アクションゲームでは、よく図のように X-Y平面上の動きZ軸の動き にキャラクターのアクションを分解します。
そしてそれぞれのアクションをコントローラに割り当てるわけですが、大体はX-Y平面の移動を 十字キーアナログスティック 、Z軸の移動を ボタン に割り当てていますね?
(このあたりは好きなゲームを良く観察してください)

X-Y平面は大抵の場合地面と平行です。
なぜこの平面に沿って動かすかというと、地面の上を歩かせたいからです。

ここでPitchやRollを移動に含んでしまうと、地面と平行だったはずのX-Y平面が傾いてしまい、空中や地面に向かって進み始めてしまいます。
UE4ではデフォルトでキャラクターや地面のCollision、キャラクターに対するGravityScaleが適用されているため、目に見える不具合は起きていませんが、それらがなければたちまちおかしな動きになるでしょう。

他のゲームや物理現象をよく観察し、考えてみてください。

確かにそうですね!!

ありがとうございます

ということはPitchやRollを0にすることでまわりこみや空中(キャラが傾くこと)などを無効化

しているということですね?