‫お帰りなさい｡
‫つまり､ すでに新しいカプセル・コンポーネント・ポインタを作成し､ それをフォワード宣言しているので､ base upon
‫hにヘッダ・ファイルを含める必要はなかったのです｡
‫次に､ ベースPOMのカプセル・コンポーネント・サブ・オブジェクトを実際に構築します｡
‫では､ 実際にユーカプセルコンポーネントを構築するにはどうすればよいのでしょうか｡
‫その過程はとても非現実的です｡
‫エンジン固有のアンリアル・エンジンは､ デフォルトのサブ・オブジェクトを作成します｡
‫これはテンプレート機能です｡
‫テンプレート機能は､ 選択された型に適応するので､ 特定の型を選択してデフォルトを作成することができます｡
‫サブオブジェクトはそのタイプに適応します｡
‫デフォルトのサブオブジェクトを作成するために､ 構築したい型を渡します｡
‫通常の関数と異なり､ このような角括弧があります｡
‫ここで､ 構築する型を渡します｡
‫これで､ create default sub objectもその括弧の中に引数を取るようになりました｡
‫これは､ サブオブジェクトに割り当てる名前になります｡
‫これは変数名とは異なり､ 文字列リテラルとして渡される｡
‫そこで､ 一例をご紹介します｡
‫例えば､ uの静的メッシュコンポーネントを作成したいとします｡
‫そこで､ create default sub object を呼び出し､ 角括弧の最後に u static mesh component という型を渡し､
‫括弧の中に名前を付けます｡
‫String Literalsには､ textマクロを使うべきということは､ もうお分かりですね｡
‫ここでは､ テキストマクロを使って文字列リテラルを渡しています｡
‫さて､ 先ほども述べたように､ これはUnreal Engineが使用する内部的な名前です｡
‫これを利用した機能は他にもあります｡
‫例えば､ get default sub object by nameという関数があります｡
‫これは､ 特定のオブジェクトに属するサブオブジェクトを検索するもので､ 特定の名前を付けて呼び出すと､
‫その選ばれた名前のサブオブジェクトを探します｡
‫つまり､ デフォルトサブオブジェクトを作成するための関数呼び出し全体は次のようになります｡
‫型式は角括弧の中に､ 名称は括弧の中に入れる｡
‫ここで､ デフォルトのサブオブジェクトを作成すると､ 新しく作成されたコンポーネントのアドレスが返されます｡
‫つまり､ 今回のケースでは､ use static mesh componentを型として渡すと､ use static mesh componentのアドレスが得られ､
‫ポインタは物のアドレスを格納するので､ それをポインタに格納することができるのです｡
‫そこで､ meshという使用静的メッシュコンポーネントポインタを作成するとします｡
‫そして､ create default sub objectが返すアドレスを､ メッシュポインタに格納することができます｡
‫さて､ デフォルトサブオブジェクトの作成の仕組みがわかったところで､ これを使ってカプセルコンポーネントオブジェクトを作成します｡
‫PONの基本コンストラクタで､ create default sub objectを使ってカプセルコンポーネントを構築し､
‫カプセルコンポーネントの型として角括弧を使い､ 括弧の中のテキストマクロでラップしたカプセルコライダーを渡します｡
‫ビデオを一時停止して､ 今コンストラクタでベースポンCPにこれを追加します｡
‫なるほど｡
‫というわけで､ バスポンドにやってきました｡
‫CPと､ カプセルコンポーネントを構築したいと思います｡
‫そこで､ capsule comp変数を受け取り､ create default subオブジェクトが返す値を代入します｡
‫さて､ このテンプレート関数には､ 括弧の他に角括弧があり､ 角括弧の中に型が入ることを確認しましたので､
‫Uカプセルコンポーネントを使用することにします｡
‫そして､ 括弧の部分にはテキストマクロを使用し､ これをカプセルコライダーと呼ぶことにします｡
‫そして､ そこに行く｡
‫今度は､ カプセルコンポーネントを使って､ このタイプのオブジェクトを構築します｡
‫そして､ ある型を使うときには､ その型のヘッダーファイルをインクルードします｡
‫では､ コンパイルを試みるとどうなるか見てみましょう｡
‫ここでも､ ライブコーディングが使えますし､ VZコードでコンパイルすることもできます｡
‫ここでは､ このセクションを通して､ VTSのコードでコンパイルすることにします｡
‫ですから､ コンパイルするときは､ Unreal Engineのエディタを閉じて､ ここからコンパイルしていることだけはおわかりいただけると思います｡
‫ここにエラーメッセージと､ 今これをコンパイルしようとしているVTSのコードを表示させたいのですが｡
‫前回の動画とは異なるエラーが発生します｡
‫未定義の型 u カプセルコンポーネントを使用しています｡
‫今回は､ このCPPファイルのUカプセルコンポーネントタイプを使って､ オブジェクトを構築してみます｡
‫このエラーコードについては､ Googleで検索してください｡
‫これで､ このセクションで2種類のコンパイルエラーを確認し､ この特定のエラーの原因を知ることができたわけです｡
‫カプセル成分は入っていません｡
‫ここで､ Unreal EngineのドキュメントにあるU capsuleコンポーネントと､ このタイプに必要なincludeを紹介します｡
‫そこで､ これをコピーして､ このBase Pond CPPの上部に貼り付けます｡
‫今､ もう一度コンパイルを試みると､ コンパイルは成功し､ エラーも表示されない｡
‫これから端末を閉じます｡
‫というわけで､ カプセルコンポーネントを作成しました｡
‫次に､ カプセルの部品がルートであることを確認したいと思います｡
‫さて､ C++でクリックしてドラッグすることで､ コンポーネントをルートとブループリントに割り当てる方法を見ました｡
‫それもかなり簡単です｡
‫そのルートコンポーネント変数を取り出して､ カプセルコンプの値を代入するだけです｡
‫これで､ capsule compをルートコンポーネントとすることを指定しました｡
‫これをもう一度コンパイルしてみましょう｡
‫そして､ 無事にコンパイルが終わったので､ 再びエディターに飛び込みたいと思います｡
‫なるほど｡
‫エディタを開いて､ ベースとなる--､ C++クラスを1つドラッグしてみます｡
‫そして､ 今度はこれをご覧ください｡
‫カプセルの部品が見えます｡
‫今､ 世界で､ アウトライナー｡
‫詳細パネルの検索のすぐ上に､ 先ほどドラッグしたベース -- が選択されていることがわかります｡
‫これを下にドラッグすると､ このベース上のすべてのコンポーネントを見ることができます --｡
‫そして､ 私たちが目にするのは､ このカプセル・コンプだけなのです｡
‫これでカプセル コンポーネントが追加され､ Unreal Engine Editor で実際にこのクラスのインスタンスをワールドに追加すると､
‫その結果が表示されます｡
‫まとめると､ C++からカプセルコンポーネントを構築する方法を学び､ ルートコンポーネント変数の値をcapsule
‫compに代入することでルートコンポーネントとしたわけです｡
‫次のビデオでは､ C++クラスのベースに､ さらにコンポーネントを追加していきます｡
‫じゃあ､ またね｡