お世話になっております。
こちらなんですがウイジェットブルプリントでつくったノードです
そこでplayer characterをゲットしてcast toでcharacter refarenseの変数を入手ではなく作ったんですが
ここで作ってもcast to first parson characterを使っているのでこの変数は first parson characterの方に作られたということですか?
https://docs.unrealengine.com/en-us/Videos//PLZlv_N0_O1gZalvQWYs8sc7RP_-8eSr3i/4NcpKCafZgU
14.22らへんです
追記です
バインドの場面ですが
ウイジェットブルプリントでバインドする場面があるのですが変数であるcharacter refarense
の中にfirst parson characterがあるのはどういうことなんでしょうか?
自分の望む回答がないからといって同じ内容の質問を複数回投稿するのはやめてください。
回答がない、という場合は大抵質問者に原因があります。
「質問内容が不明瞭である」「必要な情報が不足している」など、心当たりはありませんか?
cast toノードになぜget player characterノードが必要なのか?
cast to後の変数について
とはいえ回答がなければこのまま何度も投稿されるのが目に見えていますので、ひとまず回答します。
この回答の内容は、UE4だけに留まらない、本来オブジェクト指向プログラミングにおいて当たり前の知識です。
これは「調べればわかること」ですので、ここで回答する必要性を感じない回答者がいても不思議ではありません。
ここで作ってもcast to first parson characterを使っているのでこの変数は first parson characterの方に作られたということですか?
いいえ違います。
BP内で変数を作成した場合は、そのBP内に変数が設定されます。
UE4はC++で作成されていますので、他のクラス(この場合はBP)から動的に変数を作成する、ということは基本的に出来ません。
なので「クラス(BP)の中で必要な変数はクラス(BP)の中で作成する」というのを覚えてください。
ウイジェットブルプリントでバインドする場面があるのですが変数であるcharacter refarenseの中にfirst parson characterがあるのはどういうことなんでしょうか?
そういう操作をしているからですね。
ただ、これに関しては質問が指しているものが全くわかりません。
画像もほぼ無関係の部分を示していますので、この質問で質問者の意図を汲み取れる可能性は非常に低いでしょう。
ですので、こちらが受け取った通りの回答しています。
(ここから下の説明は、わかりやすさを重視し、語弊のある表現を用いています。詳しく知りたい場合は、自分で調べて理解してください)
キャストについてですが、C++におけるプログラムでは、オブジェクトを操作する際にその具体的な「型」を知っておく必要があります。
プラスドライバーを思い浮かべてください。プラスのネジを回すためには、プラスの形をしたドライバーが必要ですね?
ただし、すべてのクラスの型を具体的な型で持とうとすると、それ専用の操作クラスが必要になります。
また、もし型が増えた場合は、更に専用の操作クラスを作らなければなりません。
マイナスのネジが出てきた場合はマイナスのドライバーを買ってこなければいけませんし、他の形のネジが出てきた場合はそれぞれ専用のドライバーを用意しなければいけません。
すべてを用意していると、工具箱は大量のドライバーで埋め尽くされます。
そこでプログラムでは、ある程度ぼんやりとした状態で扱い、必要なときに具体的な型を明らかにする、という手法が使われます。
この際に、具体的な型を明らかにする作業が、キャストになります。
ドライバーでいうと、「回す」という操作が出来るハンドルの状態でおいておき、必要なときにビット(先端部分)をネジにあわせて取り替える、と考えれば良いでしょう。
そしてキャストした結果を変数に入れて、いつでも使えるような状態にしておきます。
この場合は、キャストしたオブジェクトへの参照(ポインタ)を、変数に格納しています。
(値型と参照型についてはここでは言及しません。自分で調べてください)
ドライバーでいうと、次使うときにいちいちどのビットがネジに合うかを調べるのが面倒なので、ハンドルとビットの組み合わせを書いたメモを置いておく、ということになります。
個人的には、「これはこうしないといけないものだ」と覚えてしまえば良いと思っています。
最終目標が「プログラミングの仕組みを理解したい」のであれば、ここできちんと理解できるまで立ち止まることは必要かと思いますが、違いますよね?
まずは自分が思うものを作ってみて、その後で「もっと詳しく知っておきたい」となったときに、詳しく調べてみる、というのをおすすめします。
「ここがわからないから進められない」と拘っていると、作りたいものも作れなくなってしまいますよ。
クラスと継承のお話のイメージを一応足しておきます
クラスAというものがあります。
これを継承したクラスAAというものがあります。(親子関係だとおもってもらって問題ありません。
AAはAの機能もつかえ、拡張したものです。
またAAを継承したAA1とAA2というクラスがあるとします。(AA1とAA2は兄弟であって親子ではありません。
castでは AをAAや AA1とAA2に変換することはできます。(親から子へのcastはできます
逆にAA2をAA1などをAやAAにするこことはできます。(子から親へのcastもできます
しかしAA1をAA2にするなどはできません。(兄弟はcastできません
でUE4の話になりますがGetPlayerCharacterといった便利関数が用意されています。
これはコントロール下にあるCharacterというクラスをもってきてくれます。
しかしご自分で作成したプロジェクトでCharacterクラスではなく
プレイヤーは羽が生えていたり銃がうてるなど拡張されたCharacterExを用意していた場合
CharacterのままではCharacterExの機能が使えません。
そのためCharacterをCharacterExにcastしてあげる必要があります。