(動画チュートリアル関連) 変数名が同じなのに同じ値にならないのはなぜ?

動画チュートリアル『3rd Person Game with Blueprints - 18 - Animation Blueprint Punching Setup』では、キャラクターのブループリントとアニメーションのためのブループリントで同じ名前の変数 IsPunching? を使っています。同じ変数ならば、わざわざ Cast を使わなくても、アニメーション ブループリントの IsPunching? 変数は、キャラクターブループリントの IsPunching? 変数と同じ値をもつのではないでしょうか?

:arrow_forward:関連する動画チュートリアル 3rd Person Game with Blueprints - 18 - Animation Blueprint Punching Setup

ブループリントが異なれば、同じ名前の変数でも異なる変数という扱いになります。言い方を換えれば、 変数はブループリント単位で管理される ため、ブループリントが異なれば、たとえ同じ名前の変数であっても「同じ変数」ということにはなりません。別の変数です。一方の変数の値を変更しても、他方の同名の変数の値が変わることもありません。

ですから、その動画チュートリアルでは、キャラクターブループリントの IsPunching? の値を得るために、Cast でキャラクターブループリントであるかどうかを判定してから、キャラクターブループリントの IsPunching? 変数を利用しています。

「ブループリントが異なれば、同じ名前の変数でも異なる変数」であることは、次のような実験で確かめることができます。

まず、コーンのブループリントを作り、ゲームが開始すると (Event BeginPlay が発動する) SameName という変数に -888 をセット (代入) してから SameName の値を表示する (当然 -888 が表示される) ブループリントを組んでおきます。

他方、キャラクターのブループリントでは、キーボードの F を押すと、同名の変数 SameName の値を表示するようにします。こちらの SameName には初期値として 1234 を入れておきます。

ゲームを実行すると、次のように、まず Event BeginPlay が発動して、-888 (コーンの方の SameName 変数の値) が表示され、その後に F を押すと、1234 (キャラクターの方の SameName 変数の値) が表示されました。

このように、いくらコーンの方の SameName 変数に値を新たにセットしても、キャラクターの方の SameName 変数には何ら影響がないことがわかりました。

逆に、影響を与えたい場合は、動画チュートリアルのように Cast を使ってコーンのブループリントで次のようなグラフを組むことができます。

上では、Event Hit すると (このコーンに何かがぶつかると)、そのぶつかったものがキャラクターかどうかを Cast で判定して、もしそうならば、As ピンを使ってキャラクターの SameName 変数に 4649 という値をセットしています。

Play をクリックして、コーンのところまで歩いて行き、ぶつかり、F キーを押すと、今度は 1234 ではなく、4649 が表示されました。つまり、キャラクターの SameName 変数の値は、コーンのブループリントによって書き換えられたことになります。

このように変数はブループリント単位で管理されることによって、気軽に変更できないようにしており、間違って値を変更できないようになっています。変更したりするには、それなりの手続き (Cast を使って etc) が必要となります。

:arrow_forward:関連する UE4 AnswerHub スレッド (動画チュートリアル関連) コンパイルすると関数でエラーになるのはなぜ?

:arrow_forward:関連する UE4 AnswerHub スレッド