UnityユーザーのためのUEブループリント入門
コードとビジュアル両方のスクリプトを比較してゲームエンジンを学びます

10. 条件分岐

条件分岐について見てみましょう。Unreal Engineブループリント特有の条件分岐も紹介します。
  • if
  • 条件式
  • 論理演算子
  • 短絡評価
  • switch
  • 三項演算子
  • [UEのみ]Unityにはない条件分岐

10. 条件分岐

10.1 if

ifは以下のようなことを実行するために使用します。
  • もしボタンを押したら、ジャンプする
  • もし〇〇なら~~をする
if(条件)は、条件を満たした場合のみ実行されます。
void Start(){
    int a = 0;
    if(a > 0){
        Debug.Log("通った");
    }
}

10.2 条件式

以下の条件式すべてをスクリプトで記述できます。
  • A == B
    • AとBは等しい
  • A != B
    • AとBは等しくない
  • A < B
    • AはBより小さい
  • A > B
    • AはBより大きい
  • A <= B
    • AはB以下
void Start(){
    int a = 0;
    if(a < 0){ // ✖
        Debug.Log("上を通った");
    }else if(a > 0){ //〇
        Debug.Log("真ん中を通った")
    }else{
        Debug.Log("下を通った")
    }
}
〇のなかで一番上のものだけが実行されます。
void Start(){
    int a = 1;
    if(a > 0){ // 〇
        Debug.Log("上を通った");
    }else if(a == 1){ //〇
        Debug.Log("真ん中を通った")
    }else{
        Debug.Log("下を通った")
    }
}
bool型は真か偽かを表します。trueかfalseの2種類の値しか入れられません。
  • true 真
  • false 偽
void Start(){
    int a = 1;
    bool jouken1 = a > 0;
    bool jouken2 = a == 1;
    if(jouken1){ 
        Debug.Log("上を通った");
    }else if(jouken2){ 
        Debug.Log("真ん中を通った")
    }else{
        Debug.Log("下を通った")
    }
}
複数の条件をANDやORで繋げることができます。
void Start(){
    int a = 2;
    if(a > 0 & a < 2){ 
        Debug.Log("上を通った");
    }
}

10.3 論理演算子

論理演算子は複数の条件を判定に利用することがあります。
例えばbool型 & bool型の場合は
  • true かつ trueは、true
  • false かつ trueは、false
になります。bool型 | bool型の場合は
  • true または trueは、true
  • false または trueは、true
  • false または falseは、false
になります。
void Start(){
    int a = 2;
    if(a > 0 & a < 2){ 
        Debug.Log("上を通った");
    }else if(a > 0 | a < 2){
        Debug.Log("真ん中を通った");
    }else{
        Debug.Log("下を通った")
    }
}

10.4 短絡評価

短絡評価とは、左側を見るだけで条件が確認している場合を右側をみないことです。
void Start(){
    int a = 2;
    if(a > 0 && a < 2){ 
        Debug.Log("上を通った");
    }else if(a > 0 || a < 2){
        Debug.Log("真ん中を通った");
    }else{
        Debug.Log("下を通った")
    }
}
さらに複雑な条件を記述した短絡評価のスクリプト例です。
void Start(){
    int a = 1;
    int b = 2;
    if((a > 0 && b < 0) && (a == 1 && b == 2)){ 
        Debug.Log("上を通った");
    }else if((a < 0 || b > 0) || (a != 1 || b != 2)){
        Debug.Log("真ん中を通った");
    }else{
        Debug.Log("下を通った")
    }
}

10.5 switch

Switchの記述は以下のとおりです。ポイントは各caseの範囲の最後にbreakを記述することです。
Switch(比較対象)
{
    case 比較するもの:
        処理内容
        break;
}
caseの比較対象が連続しているときは連続して記述することが可能です。defaultは記述しなくてもよいです。
void Start(){
    int a = 1;
    switch(a){
        case 0:
            Debug.Log("aは0です");
            break;
        case 1:
            Debug.Log("aは1です");
            break;
        case 2:
            Debug.Log("aは2です");
            break;
        case 3:
        case 4:
            Debug.Log("aは3もしくは4です");
            break;
        default:
            Debug.Log("aは01234以外です");
            break;
    }
}

10.6 三項演算子

三項演算子とは、 (真偽の条件式) ? 真値(真の場合の式) : 偽値(偽の場合の式)となる、一行で真偽の条件分岐を記述する方法です。
void Start(){
    int a = 1;
    string jouken = (a > 0) ? "上を通った" : "下を通った";
    Debug.Log(jouken);
}

10. 条件分岐

10.1 if

UE BPにおけるifはBranchノードで実現します。

10.2 条件式

以下の条件式すべてをUE BPで記述できます。
  • A == B
    • AとBは等しい
  • A != B
    • AとBは等しくない
  • A < B
    • AはBより小さい
  • A > B
    • AはBより大きい
  • A <= B
    • AはB以下
〇のなかで一番上のものだけが実行されます。
UE BPではboolean型に条件式を代入することはできません。
複数の条件の場合は以下のように記述します。

10.3 論理演算子

unityで記述されている論理演算子のスクリプトをUE BPで記述します。
{4-10_9}}
他の論理演算子でよく使用するものを紹介します。

ANDノード

ORノード

NOTノード

NOT EQUALノード

EQUALノード

GREATER THANノード

GREATER THAN OR EQUAL TOノード

LESSER THANノード

LESSER THAN OR EQUAL TOノード

10.4 短絡評価

ANDノードやORノードなどは、複数の入力ピンを扱えるノードですが、すべての入力値が評価(参照)されて初めて結果が出力されるノードなので、短絡評価は表現できません。
🔗 参考リンク
Qiita
【UE4/UE5】ブループリントの意外な仕様や裏技の紹介
以下のサイトなどでは短絡表現をUE C++を使って表現する方法が紹介されています。
🔗 参考リンク
ヒストリアブログ
[UE4]複数のConditionをもつBranchノードを作る
短絡評価自体は表現できませんが、Unityで記述した短絡評価のスクリプトをUE BPで記述します。

10.5 switch

UE BPもSwitch onノードを使うことでswitch文を扱うことができます。
🔗 参考リンク
ヒストリアブログ
[UE4] 最初に知っておきたいBlueprintノード集
🔗 参考リンク
凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ
UE4 入力の値に応じて別の処理を実行する(Switch on Int, String, Name, Enum)

10.6 三項演算子

UE BPでは、Select (Int, Float, String, …)ノードを使います。C言語の3項演算子のような使い方が出来るノードです。詳しくは以下のURL先にて解説されています。
🔗 参考リンク
ヒストリアブログ
[UE4] 最初に知っておきたいBlueprintノード集
ここではUnityで示したString型の三項演算子のスクリプトをUE BPで記述します。

10.7 [UEのみ]Unityにはない条件分岐

Unityにはない条件分岐については簡単な紹介と、注意点を紹介します。

Gateノード

扉に動作を与えたいときに使える便利なノードです。
🔗 参考リンク
僕の私のUnrealな日々
UE4:Gateを使った手動扉の実装について

Flip Flopノード

AとBの実行ワイヤー先のフローを交互に行うノードです。
また、このような特殊なノードを使うときの注意点をまとめていただいているブログがありますので、こちらも参考までに紹介します。
🔗 参考リンク
凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ
UE4 フローノードを関数の中で呼び出したときの罠(Multi Gate、Flip Flop、Do Once)