ブループリントの基本的な構成要素⑦ ブループリントの実行順序

ビデオの内容紹介 
ブループリントがどのような順序で実行されるのかについて、具体的なグラフを例にとって説明しています。前回の記事で「このあたりの因果関係的なことは慣れなければ普通のプログラムよりも難しく感じるかもしれません」と書きましたが、まさにそのことを扱っています。グラフは組むことが目的ではないため、学習する内容はそれほど多くありません。

原題 Blueprint Essentials – 7 – Blueprint Execution Order

キャラクターの向きを変えるとその方向が表示されるブループリントの大まかな実行順序

作成されているブループリントは、エディタでプレイすると、キャラクターの向きに応じてその方向が文字となって表示されるという単純なものです。これまで作ってきた MyCharacter の Event Graph の中に作っています。下の画像では、V キーを使っていますが (ビデオでは E キー)、これは、他のグラフもまだ消していないため、E キーが重複しないようにしているためです。

方向表示

大まかな実行順は次のようになります。

V キーを押す (ビデオでは E キーになっています)

Switch on Int (整数値に基づいて分岐させる) が発動する

Switch on Int が発動したことにより Switch on Int につながっている一連のノードの左端に戻って実行されて、Switch on Int に値が供給される

Switch on Int に供給された値に基づいて列挙型変数 Direction に値が Set される

列挙型変数 Direction に値が Set されたことにより f Print String が発動される

f Print String が発動したことにより、f Print String につながっている一連のノードの左端に戻って実行されて、f Print String に値が供給される

メモ 
① Switch on Int の訳語が「整数型に切り替える」となっていますが、正しくは「整数値に基づいて処理を分岐させる」となると思います。

② Switch on Int は、供給される整数値に基づいて、処理が変化 (スイッチ) します。たとえば、Switch on Int に 3 という値が供給されると、South East という値が Directioni にセットされます。

③ 列挙型変数の設定方法は、「ブループリントの基本的な構成要素⑤ 列挙型変数」を参照にしてください。

④ 上記ブループリントをコンパイルすると、Switch on Int のDefault の処理が定まっていないため警告が出ますが、コンパイル自体は成功するので、プレイすることができます。

Switch on Int に値を供給しているノード群の意味

Switch on Int につながるノード群は、次のように一番左から実行されます (画像では左上から実行されます)。

f Get Player Character によって指定された Index のキャラクター (この場合 0 ) の情報を取得する (取得してその値を返す)

f Get Actor Rotation によってアクタの回転 (角度) の情報、つまり Rotator (構造体) を取得する

f Combine Rotators によって Z 軸について 22.5 度オフセットする (先の Rotator に 22.5 度を加えている)

Break Rot によって Rotator を Pitch、Yaw、Roll に分解する (別々に扱えるようにする)

Yaw (Z を軸とする回転) から
(a) f Float + Float につなぎ Yaw に 360 度を加え、その値を f Select Float の B につなげる
(b) f Float > Float につなぎ、0.0 よりも Yaw が大きい場合は true が小さい場合は false が返り値となり、Pick A (A を選択) につなげる

f Select Float は、PickA が true であれば A に入っている値 (この場合は 生の Yaw) を返し、false であれば B に入っている値 (この場合は Yaw+360) を返す

f Float/Float で、先の返り値を 45 度で割る (円を 8 等分するために)

f Floor によって、その値の小数点以下を切り捨てる

Switch on Int (整数値に基づいて分岐させる) にその値を供給する

メモ 
① f Combine Rotators によって 22.5 度が Z に加えられていますが、その理由については、たとえば北のことを考えてみます。北は 0 度を中心に前後 22.5 度の幅、すなわち 336.5 度から 22.5 度をその範囲とすべきです。0 度から 45 度の範囲を北とすべきではありません。そこで全体を 22.5 度ずらせば簡単に計算できるようになるので、この関数を使っています (336.5 度から 22.5 度を北とするやり方でもいいのですが、若干計算が面倒になるので、一括して 22.5 度を加えています)。ですから、次のように f Combine Rotators を外しても方向自体は表示されますが、North と表示されるべきものが、North West と表示されてしまいます。

方向 offset なし

② f Float/Float において 45 度で割っているのは、全体 360 度を 8 等分 (North、North East、East …など) にするためです。

③ 切り上げは、f Ceil で行います。

まとめ 
実行ワイヤによってつながっているノードが発動すると、それにつながっている左側のノード群が実行されて値が供給される。

どうもお疲れ様でした!



シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. YAMAME より:

    なつのやさん

    こんばんは。
    サードパーソン ブループリント ゲーム入門の1~本項まで読ませて頂ました!
    私は事あって方位関係のBlueprintやAPIを探していましたが、求めている例は見つかりませんでした。Angle Degree Directon Orient(Orientation) Calculate Rotation Yaw Locomotion などで検索していました。しかし…例えばBlueprint API「f Combine Rotators」のA点にはXYZ 3つの枠があるが、どの様な値を入れると どう戻り値が変わるのか…「f Calculate Direction」の入力点にはRPY3つの枠が…(以下略)といった具合です。)

    ですが今頁の説明で(後者は相変わらずですが(涙))前者はとても良く解りました!そして「f Combine Rotators」で目的の方も達成できそうです!

    なつのやさんは他の解説でお忙しいかと思いますが、余裕がありましたらRotationやDirecton関係の関数の解説、マニュアル「アニメーション コンテンツ例」の「1.3 Locomotion BlendSpace」「1.4 Aimoffset」
    なども解説して頂けると、私事ではありますが大変ありがたいです。

    兎にも角にも、今後とも解説がんばって下さい!応援してます!

    • なつのや より:

      YAMAMEさん

      ご覧になっていただきまして、ありがとうございます!

      f Combine Rotators の例は若干複雑でしたので、拙い記事を分かって頂いて本当にうれしいです!

      現在、(特に日本語では入手しづらい情報について) UE4 のためのデータベースを構築しているところなのですが、ご指摘の「RotationやDirecton関係の関数」や「1.3 Locomotion BlendSpace」「1.4 Aimoffset」などについても、適宜取り上げていければと考えております。(ToDo に入れさせていただきました)。まだ時間はかかると思うのですが、頑張りたいと思います。

      今後もアドバイスなどありましたら、どうぞよろしくお願いいたします!

      • YAMAME より:

        なつのやさん

        こんばんは。
        まったく拙くないですよ!分かり易いです!(^ ^)
        むしろ当方の文章が”「f Combine Rotators」で問題の打破ができる”と興奮し、勢いで書いたために、可笑しな事になっています。

        ×”サードパーソン ブループリント ゲーム入門の1~本項まで読ませて頂ました!”
        ○”ブループリントの基本的な構成要素1~本項まで読ませて頂ました!これから、手始めにサードパーソン ブループリント ゲーム入門の方を読ませて頂きます!”

        ”しかし…”×  ”といった具合です”×
        ”また、” ○  ”という様に使えそうな関数があっても使い方が分からない状態です”○

        ~適宜取り上げ~ & ~ToDo に入れ~
        ありがとう御座います。首を長めにしてお待ちさせて頂きます。(笑)

        アドバイスなどと大それたものでは…私上の単なる要望です(汗)
        そして、此方こそよろしくお願い致します!

        • なつのや より:

          YAMAMEさん

          はい、お言葉を励みにして、頑張りたいと思います!ありがとうございます!!

          また何かありましたら、どうぞよろしくお願いいたします。