【UE4ゲーム制作講座】超基礎編・これを見れば継承とキャストがわかる!

Поделиться
HTML-код
  • Опубликовано: 24 окт 2024

Комментарии • 35

  • @noraneco
    @noraneco 6 месяцев назад

    UE5の勉強を始めて3日目ですがとても参考になっています😺全ての動画を一度観て基本にしたいと思います!

    • @kuriemeiku
      @kuriemeiku  6 месяцев назад +1

      おおおお!ありがとうございます!!!
      頑張ってください!

    • @noraneco
      @noraneco 6 месяцев назад

      @@kuriemeiku もちろん新しい動画も楽しみにしてますんで近況お知らせくださいね😺

  • @苔モス-y2r
    @苔モス-y2r Год назад +1

    学生の例え分かりやすかったです

    • @kuriemeiku
      @kuriemeiku  Год назад

      ありがとうございます!!!

  • @おおみみず
    @おおみみず 2 года назад +2

    てっきりアクターやポーンはブループリントの種類なのかと思っていました、親と子の関係なんですね。
    OtherActorのピンからキャストする場合はActorの子であるポーン、キャラクター、キャラクターの子に対応している感じでしょうか?

    • @kuriemeiku
      @kuriemeiku  2 года назад +4

      コメントありがとうございます~!
      >アクターやポーンはブループリントの種類なのかと思っていました
      正確には、アクターやポーンはC++で定義されたクラスですね。UEの世界には、C++で定義されたクラスと、ブループリントで作られたクラスの2種類があって、
      アクターやポーンはC++で定義されたクラス、今回話していたThirdPersonCharacerはブループリントクラスになります。
      コンテンツブラウザで新規作成するとき、「ブループリントクラス」という名前になっていますが、ブループリントで作られたクラス、ということですね。
      >OtherActorのピンからキャストする場合はActorの子であるポーン、キャラクター、キャラクターの子に対応している感じでしょうか?
      OtherActorに実際にどのアクターが入っているのか、によりますね!
      今回の例でいえば、ThirdPersonCharacerが箱(BP_DamageBox)にぶつかったときには、OtherActorのピンにThirdPersonCharacerが入ってくるので、
      その場合にはポーン、キャラクター、ThirdPersonCharacerにキャストできますが、
      7:49あたりで見ているように、箱同士でぶつけると、OtherActorのところには箱(BP_DamageBox)が入ってくるので、
      ポーンやキャラクターにはキャストできず、ActorまたはBP_DamageBoxにキャストできる、という感じです。
      キャストはあくまでも変換する(見方を変える)ことなので、見る対象によってどのクラスにキャストできるかが変わってきます。
      (今回でいうとOtherActorに実際にどのアクターが入っているかで、どのクラスへのキャストに成功するかが変わる)

    • @おおみみず
      @おおみみず 2 года назад +1

      @@kuriemeiku
      コンポーネントでカーソルをあてるとソース:継承したC++やこのブループリント
      など表示されますが、これが二種類のクラスという事なんですね。
      箱にオーバーラップした時にThirdPersonCharacerをキャストするよう設定しているので、ThirdPersonCharacerを除いたアクターと接触した場合Failedに進んでhelloが表示されるという事で合っていますかね?
      そうであれば大体分かった気がします。
      ノードを繋いでいて疑問に思ったのですが
      キャラクターの行動を制限するために(硬直や死亡時の制限など)ブランチを沢山使用したのち見辛いため関数にまとめFalseの時のみに進むようにしました、しかしながら関数にまとめた場合どうも結果がどちらであっても次のノードを動作させてしまいます。
      関数としてまとめないで普通のブランチとしてイベントグラフに配置した場合はそのブランチでちゃんと動作が止まるのですが、何か違いがあるのでしょうか?

    • @kuriemeiku
      @kuriemeiku  2 года назад +1

      >箱にオーバーラップした時にThirdPersonCharacerをキャストするよう設定しているので、ThirdPersonCharacerを除いたアクターと接触した場合Failedに進んでhelloが表示されるという事で合っていますかね?
      そうですね、ThirdPersonCharacerでキャストしているので、ThirdPersonCharacer以外のアクターのときにはFailedに進みます。
      ただ、ThirdPersonCharacer_Childのように、ThirdPersonCharacerを継承しているアクターであればThirdPersonCharacerにキャストできるので、
      その場合は上の方の実行ピンを通ります。あくまでも継承関係にあるクラスならキャストできる、というところがポイントですね。
      >キャラクターの行動を制限するために(硬直や死亡時の制限など)ブランチを沢山使用したのち見辛いため関数にまとめFalseの時のみに進むようにしました
      Falseの時のみ進む、というのを関数内でどう実装しているか次第ですね…。
      イベントグラフで関数を呼んだ後は、何がどうなろうと繋がっている次の実行ピンが呼ばれるので、関数の中で処理を完結させないとダメだとは思いますが、
      そういうことで合っていますでしょうか…?
      もしそうなら、関数ではなく、マクロにして、Trueの時とFalseの時で実行ピンを分ける、という形にするのが良いかなと思いました。

    • @おおみみず
      @おおみみず 2 года назад +1

      @@kuriemeiku
      重要なのは継承しているかどうかなんですね。
      >イベントグラフで関数を呼んだ後は、何がどうなろうと繋がっている次の実行ピンが呼ばれるので、関数の中で処理を完結させないとダメだとは思いますが、
      そういうことで合っていますでしょうか…?
      なるほど!イベントグラフの関数はどうやっても次の実行ピンに進んでしまうのですね。マクロにしてみた所次の実行ピンに進まなくなりました。
      関数に折りたたむと動作が高速化(処理が軽い?)するみたいな話を聞いたので取りあえず何でも関数に折りたたむようにしていたのですが、実行ピンに影響を与えたい場合はマクロにする必要があるのですね。
      これらの事をかんがえると関数は実行ピンが不要で純粋関数にできるものだけで纏める方が良いという事でしょうか?
      実行ピンを使用する場合マクロに折りたためば良いのでそう思いました。

    • @kuriemeiku
      @kuriemeiku  2 года назад +1

      >これらの事をかんがえると関数は実行ピンが不要で純粋関数にできるものだけで纏める方が良いという事でしょうか?
      そうですね~、関数にできてマクロに出来ないこともあるので、一概にマクロ最強!というわけでもないと思います。
      (外部のBPから使いたいときや、アクセス指定子の変更、継承によるオーバーライドなど)

  • @kazuhiro68
    @kazuhiro68 Год назад +1

    レベルbpで配置したTriggerBoxのOnActionOverlapイベントノードを配置したくでも出ません。右クリックのノード検索に関してもチュートリアル通りのノード置きたい、としてもテキストが異なるために配置できないことがよくあります。テキストはある法則の癖があるらしいのですが探し方を知りたいです。

    • @kuriemeiku
      @kuriemeiku  Год назад

      う~んと、この動画の内容とはあまり関係ないコメントということでいいですかね…?(この動画ではレベルBPの話はしてない…はず…)
      レベルBPで「レベルに配置した特定のTriggerBoxのOnActionOverlapイベント」に対して処理を記述したい、ということですかね…?
      であれば、ビューポートでそのTriggerBoxを選択した状態で、レベルBPを開き、右クリックから「TriggerBoxにイベントを追加」でActorBeginOverlapを選択すればできると思います。

    • @kazuhiro68
      @kazuhiro68 Год назад

      @@kuriemeiku すいません。6:10あたりにOnActionOverlapがあって、これが作れる場合作れない場合があってこれは一体どういう条件なのか見えないので疑問になりました。スコープはどこで決定しているのか?という疑問かもしれませんでした。

    • @kuriemeiku
      @kuriemeiku  Год назад

      @@kazuhiro68 作れない場合って、どういう場合でしょうか?
      ActorBeginOverlapはActorクラスで定義されているので、Actorを継承しているBPなら基本的には使えると思います。
      レベルBPはActor継承なのですが、ActorBeginOverlapを含むいくつかのイベントは使えないようにC++側で設定されているので使えなくなっている、という感じです。

    • @kazuhiro68
      @kazuhiro68 Год назад

      @@kuriemeiku 例えば2:49のイベント ActorBeginOverlapですがこれは手元の環境には表示されません。BeginPlay,Tickは表示されています。今回だけというわけではなくて色々な状況の説明の画面通りに手元の環境にはなっていないことが多く、多分何かの勘違いだとは思うのですが。

    • @kuriemeiku
      @kuriemeiku  Год назад

      @@kazuhiro68 まず、大前提として、UnrealEngineのバージョンやOSの違い、設定の違いなどによって、画面の表示が私とあなたで異なることがあります。なので、まったく一緒だったらラッキー、くらいの気持ちのほうがいいかもしれません。これさえ押さえればOK、みたいなものはおそらく存在せず、ケースバイケースかなと思います。(もしくは、環境を完全に合わせるか、ですね)
      そのうえで、ActorBeginOverlapが表示されていないことには、複数のケースが考えられます。
      何らかの拍子に消してしまったとか、そもそも見ているBPがActor継承じゃないとか、見ているBPがレベルBPでActorBeginOverlapが使えないように設定されているとかですね。
      ですが、あなたの状況がわからないので、どのケースなのか、というのもちょっと分からないです…!
      画面をキャプチャーしていただいたりすれば、もうちょっと詳しいことが言えると思います!

  • @rtktkt748
    @rtktkt748 2 года назад +1

    アクタが他のアクタの変数を書き換える事は可能ですか?

    • @kuriemeiku
      @kuriemeiku  2 года назад +1

      5:47
      ここで設定しているように、変数を外部からアクセスできるようにすれば、
      「Set変数名」のノードで書き換えることができますね!

  • @rtktkt748
    @rtktkt748 2 года назад +1

    他アクタのカスタムイベントを呼び出したい時はどうすればいいですか?

    • @kuriemeiku
      @kuriemeiku  2 года назад +1

      はじめてコメントありがとうございます~!!!
      Actorとして取得した値を、他アクタにキャストすればそのアクタで定義されているカスタムイベントが呼べる、んですが、そういうことであってます…?
      もし違ったら、「ぶつかった敵のHPを減らしたい!」みたいな形で、ゲーム的にどんなことをやりたいのか、という形で書いてもらったほうがいいかもです!

    • @rtktkt748
      @rtktkt748 2 года назад +1

      返信ありがとうございます!
      1対1のオンラインターン制ゲームを作りたいんですけど、2人設定でエディタを起動した時同じ変数がコピーされてターン用の変数がうまくやり取り出来ないので、プレイヤー0とプレイヤー1にそれぞれ紐付けしたポーンとその親としてのアクタの3つをレベルに置いて、
      例えばプレイヤー0から親アクタの変数を書き換えて、その通知を聞いた親アクタがプレイヤー1に通知を出して…みたいにしてターンの移動とか数値のやり取りをしようと思ったんですけど、そもそも親の変数を子のBPで書き換えても親の値が変わらないので…まずやり方から可能なのかわからないのでどうしようかと思って、、、
      お願いします!
      あとother object出力ピンが無いノードの次にキャストを置いた時の object入力ピンに何を繋げたらいいか分かりません

    • @kuriemeiku
      @kuriemeiku  2 года назад +1

      なるほど~!オンラインゲームの変数に関してですね!
      ruclips.net/video/JCKzdzTjt2U/видео.html
      こちらの再生リストの1個目と2個目の動画を見てもらうと、イメージつくかもしれないです…!
      >other object出力ピンが無いノードの次にキャストを置いた時の object入力ピンに何を繋げたらいいか分かりません
      キャストしたいもの、ですね!
      ActorBeginOverlapは「別のアクターに重なったときのイベント」であり、「重なった相手がOtherに入ってくる」ので、
      重なった相手が~~だったらこの関数を呼びたい、ということをやるためにキャストをしているわけです。
      なので、「キャストを行う」ということは「何らかのアクターのキャストを行って関数やイベントを呼ぶ」ことがしたいわけであり、
      その「何らかのアクター」をobject入力ピンにつなげる、ということになります!
      伝わりますかね…?

    • @rtktkt748
      @rtktkt748 2 года назад +1

      @@kuriemeiku
      ありがとうございます!
      2人設定でプレイヤーアズリスンサーバーで起動した時にそれぞれ別のポーン(コピーでなくレベルにそれぞれ配置した)を操作するにはどうしたらいいでしょうか?
      セルフコンポーネント>詳細>入力>auto receive inputでそれぞれプレイヤー0とプレイヤー1を入れてみたんですけど0って入れた方しか動かせないです…(どっちも0に接続されてサーバーとクライアントで処理は同期してません)

    • @kuriemeiku
      @kuriemeiku  2 года назад +1

      @@rtktkt748 オンラインマルチの場合、auto receive inputを設定するのではなく、別の方法が必要、という理解です…!(間違ってたらすみません!)
      ・GameModeでプレイヤーとして使いたいポーンを設定する
      ・プレイヤーとして使用したいポーンはレベル上に置かず、代わりにプレイヤーの開始位置にPlayerStartを配置する
      とすると、PlayerStartの位置にポーンが初期化されて、それぞれが動かせるようになるはずです!
      それぞれのプレイヤーを動かすときは、それぞれのプレイヤーのウィンドウに切り替えて一人ずつ操作してください。